从Called函数获取调用函数名称

Sau*_*ron 36 .net c# function .net-3.5

可能重复:
如何找到调用当前方法的方法?

如何从c#中的被调用函数中获取调用函数名?

Ben*_*n M 75

new StackFrame(1, true).GetMethod().Name
Run Code Online (Sandbox Code Playgroud)

请注意,在发布版本中,编译器可能会内联被调用的方法,在这种情况下,上面的代码将返回调用者的调用者,因此为了安全起见,您应该使用以下方法修饰您的方法:

[MethodImpl(MethodImplOptions.NoInlining)]
Run Code Online (Sandbox Code Playgroud)

  • 要注意以这种方式走堆栈会带来相当沉重的性能.我强烈建议在使用之前寻找不涉及堆栈步行的解决方案. (11认同)
  • 我知道这是一个欺骗和标记的.net 3.5,但是为了帮助那些首先偶然发现这个问题的搜索者(像我一样),最好在你的答案中指出在C#5.0中你现在可以使用调用者信息,如:http://visualstudiomagazine.com/articles/2012/11/01/more-than-just-async.aspx (8认同)
  • 由于提到了 MethodImpl 属性,这个答案实际上比重复问题中的答案更好。 (2认同)

Joe*_*ine 14

这将为您提供所在方法的名称:

string currentMethod = System.Reflection.MethodBase.GetCurrentMethod().Name;
Run Code Online (Sandbox Code Playgroud)

请谨慎使用,因为可能会受到性能影响.

To get callers:
StackTrace trace = new StackTrace();
int caller = 1;

StackFrame frame = trace.GetFrame(caller);

string callerName = frame.GetMethod().Name;
Run Code Online (Sandbox Code Playgroud)

这使用堆栈遍历来获取方法名称.调用者的值是调用栈的距离.小心不要走远.