如何在C#中改进get调用方法的代码

Ram*_*feh 3 c# mef stack-trace silverlight-5.0

我们有一个"logger"类,它具有获取日志消息的log方法,并将消息和调用方法写入日志,首先我们还要将以下内容发送给log方法新参数Method.Base.GetCurrentMethod().我找到了另一种方法,使用Relection.MethodBase:

public void Log(string message)
{
   stackTrace = new StackTrace();
   string methodName = stackTrace.GetFrame(1).GetMethod().Name;
   ....
}
Run Code Online (Sandbox Code Playgroud)

但我有一个问题,每次调用log方法,我都被迫创建新实例StackTrace,当我尝试在构造函数中创建实例时,我得到方法名称InvokeMethod.

我们在项目中使用MEF.任何想法如何改进代码?

dri*_*iis 6

如果您使用的是最新版本的C#(5),则会通过call-site属性将其内置到语言中.你会像这样使用它:

public void Log(string message, [CallerMemberName] string methodName = null)
{
}
Run Code Online (Sandbox Code Playgroud)

您在不提供第二个参数的情况下调用该方法,C#编译器将自动为您填充它.您可以使用以下Call-Site属性:CallerMemberName,CallerLineNumberCallerFilePath.