2012-04-12 21 views
44

Olası Çoğalt: Örneğin
Can you use reflection to find the name of the currently executing method?
C# how to get the name of the current method from codeGeçerli işlevin adı nasıl alınır?

:

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

baskı: foo

i Bu mümkün değil mi? yöntem ebeveyn yöntemi adını almak inlined ise

+0

.Net 4.5 olarak, arayanın adını almak için CallerMemberNameAttribute kullanabilirsiniz. Bkz. Https://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.callermembernameattribute(v=vs.110).aspx ... İşlevinizin gövdesini, anonim bir işlev olarak içinde ([CallerMemberName] string functionName = "") => {}. Yansıma yönteminin kabul edilen cevapta kullanılması ile ilgili problemler: (1) fonksiyonun satır içi ve/veya (2) fonksiyonun ismi kamuya açık değilse ve kod gizlenirse gizlenebilir. – GreatAndPowerfulOz

cevap

102

bu deneyin:

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

Tam olarak öyle. Teşekkürler – Jack

+5

.Net 4.5 kullanan kişiler için [CallerMemberNameAttribute] var (https://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.callermembernameattribute.aspx) –

14

Sen, yığın izleme

using System.Diagnostics; 

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

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

kontrol Ancak dikkat edebilirsiniz.

İlgili konular