我正试图找到以有效的方式记录方法名称的方法w.r.t.速度和可维护性。我想,在.NET 4.5中Caller Information attributes只是为了这个目的而暴露,除了速度部分。我觉得这些只是使用System.Reflection.MethodBase.GetCurrentMethod()
或stackTrace.GetFrame(1).GetMethod().Name
(来自here)的语法糖。 (或)这些方法是否也具有性能优势?
在C#中,有没有办法在编译时获取方法名称(如C++中所述)?
答案 0 :(得分:69)
调用者信息属性使C#编译器在调用点提供调用者的名称。这发生在编译时,没有涉及反射。
public void DoProcessing()
{
LogCall();
}
public void LogCall([CallerMemberName] string memberName = "")
{
Console.WriteLine(memberName + " was called.");
}
将编译为:
public void DoProcessing()
{
LogCall("DoProcessing");
}
public void LogCall(string memberName)
{
Console.WriteLine(memberName + " was called.");
}