如何在运行时从方法中找到调用方法的方法名称?
例如:
Class A
{
M1()
{
B.M2();
}
}
class B
{
public static M2()
{
// I need some code here to find out the name of the method that
// called this method, preferably the name of the declared type
// of the calling method also.
}
}
答案 0 :(得分:10)
您可以尝试:
using System.Diagnostics;
StackTrace stackTrace = new StackTrace();
Console.WriteLine(stackTrace.GetFrame(1).GetMethod().Name);
答案 1 :(得分:1)
我认为你在寻找:
using System.Diagnostics;
StackTrace stackTrace = new StackTrace();
stackTrace.GetFrame(1).GetMethod().Name;
答案 2 :(得分:0)
您可以通过显示调用堆栈来执行此操作,如下面的代码所示。这将找到整个调用堆栈,而不仅仅是调用方法。
void displaycallstack() {
byte[] b;
StackFrame sf;
MemoryStream ms = new MemoryStream();
String s = Process.GetCurrentProcess().ProcessName;
Console.Out.WriteLine(s + " Call Stack");
StackTrace st = new StackTrace();
for (int a = 0;a < st.FrameCount; a++) {
sf = st.GetFrame(a);
s = sf.ToString();
b = Encoding.ASCII.GetBytes(s);
ms.Write(b,0,b.Length);
}
ms.WriteTo(System.Console.OpenStandardOutput());
}
答案 3 :(得分:0)
检查System.Diagnostics.Trace类,但据我所知 - 使用时是性能价格
答案 4 :(得分:0)
最好不要使用StackFrame,因为存在一些.NET安全问题。如果代码不完全受信任,则表达式“new StackFrame()”将引发安全性异常。
要使用当前方法:
MethodBase.GetCurrentMethod().Name
关于调用方法,请参阅Stack Overflow问题 Object creation, how to resolve "class-owner"? 。