2013-08-04 105 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