2012-04-12 14 views
44

Powiel możliwe:
Can you use reflection to find the name of the currently executing method?
C# how to get the name of the current method from codeJak uzyskać nazwę bieżącej funkcji?

Na przykład:

void foo() { 
    Console.Write(__MYNAME__); 
} 

druk: foo

ja możliwe jest to zrobić w C#?

+0

w .NET 4.5, można użyć CallerMemberNameAttribute aby uzyskać nazwę rozmówcy. Zobacz https://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.callermembernameattribute(v=vs.110).aspx ... Możesz następnie zawinąć treść swojej funkcji w anonimową funkcję jako in ([CallerMemberName] ciąg functionName = "") => {}. Problemy z używaniem metody refleksji, jak w przyjętej odpowiedzi, są następujące: (1) funkcja może być inline i/lub (2) nazwa funkcji może być zaciemniona, jeśli jest niepubliczna, a kod jest zaciemniany. – GreatAndPowerfulOz

Odpowiedz

102

Spróbuj tego:

System.Reflection.MethodBase.GetCurrentMethod().Name 
+3

Dokładnie to. Dzięki – Jack

+5

Dla osób korzystających z .Net 4.5 istnieje [CallerMemberNameAttribute] (https://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.callermembernameattribute.aspx) –

14

Można sprawdzić ślad stosu

using System.Diagnostics; 

// get call stack 
StackTrace stackTrace = new StackTrace(); 

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

Ale uwaga, jeśli metoda jest inlined masz nadrzędną nazwę metody.

Powiązane problemy