查找祈求者方法名称

时间:2012-03-08 16:49:35

标签: c# .net

我的结构如下:

public class BaseClass
{
    public string SendError(string Message){

         //which method called me

         return Message;

    }
}


public class TypeAClass : BaseClass
{
    public static TypeAClass Instance { get; set;}

    public void TestToTest()
    {
         SendError("Test Message");
    }
}

我可以在SendError方法中获取调用SendError()的方法名称。例如,在这种情况下,它应该给我名称TestToTest()

4 个答案:

答案 0 :(得分:9)

这是C#5的一个特性:

您可以将函数的参数声明为调用者信息:

public string SendError(string Message, [CallerMemberName] string callerName = "")
{
    Console.WriteLine(callerName + "called me.");
}

答案 1 :(得分:2)

试试这个

StackTrace stackTrace = new StackTrace();
String callingMethodName = stackTrace.GetFrame(1).GetMethod().Name;

答案 2 :(得分:2)

StackFrame caller = (new System.Diagnostics.StackTrace()).GetFrame(0);
string methodName = caller.GetMethod().Name;

答案 3 :(得分:0)

来自重复问题的the answer

using System.Diagnostics;
// get call stack
StackTrace stackTrace = new StackTrace();

// get calling method name
Console.WriteLine(stackTrace.GetFrame(1).GetMethod().Name);

或更简短:

new StackTrace().GetFrame(1).GetMethod().Name