如何在运行时从方法中查找调用方法的方法名称?

时间:2009-08-10 12:05:23

标签: .net reflection

如何在运行时从方法中找到调用方法的方法名称?

例如:

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.
    }
}

5 个答案:

答案 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"?