4

有什么方法可以获取当前我们在其中的方法的名称吗?

private void myMethod()
{
    string methodName = __CurrentMethodName__;
    MessageBox(methodName);
}

像返回类名的 this.ToString() 是否有任何可能的方法通过监视或跟踪应用程序来获取方法的名称?

4

4 回答 4

12

这会让你的名字 -

string methodName = System.Reflection.MethodInfo.GetCurrentMethod().Name;

或者

string methodName = System.Reflection.MethodBase.GetCurrentMethod().Name;
于 2013-08-04T18:15:33.543 回答
6

.NET 4.5 添加了调用者信息属性,因此您可以使用CallerMemberNameAttribute

using System.Runtime.CompilerServices;

void myMethod()
{
    ShowMethodName();
}

void ShowMethodName([CallerMemberName]string methodName = "")
{
    MessageBox(methodName);
}

这具有在编译时而不是运行时烘焙方法名称的好处。不幸的是,没有办法阻止某人打电话ShowMethodName("Not a real Method"),但这可能没有必要。

于 2013-08-04T18:17:34.653 回答
4

简单地

public string MyMethod()
{
    StackTrace st = new StackTrace ();
    StackFrame sf = st.GetFrame (1);

    string methodName = sf.GetMethod().Name;
}
于 2013-08-04T18:16:53.907 回答
2

您可以像这样获取有关方法的信息

var method = MethodInfo.GetCurrentMethod();
var name = method.Name;  //get method name
var parameters = method.GetParameters();  //get method parameters
于 2013-08-04T18:21:39.410 回答