2013-08-04 81 views
4

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

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

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

回答

12

这将让你的名字 -

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

OR

string methodName = System.Reflection.MethodBase.GetCurrentMethod().Name; 
4

只需

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

    string methodName = sf.GetMethod().Name; 
} 
6

.NET 4.5增加了Caller Information属性,这样你就可以使用CallerMemberNameAttribute

using System.Runtime.CompilerServices; 

void myMethod() 
{ 
    ShowMethodName(); 
} 

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

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

+0

的方法名称参数需要被拖欠 –

+0

UMM的信息...我想你没有编译这个。所以,当我们正在修复时,它也需要输入。 :) –

+0

@GarryVass更正(和测试),谢谢。 –

2

你能得到关于方法这样

var method = MethodInfo.GetCurrentMethod(); 
var name = method.Name; //get method name 
var parameters = method.GetParameters(); //get method parameters