2012-04-12 4 views
44

Можно создать дубликат:
Can you use reflection to find the name of the currently executing method?
C# how to get the name of the current method from codeКак получить имя текущей функции?

Например:

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

печати: foo

я t возможно сделать это в C#?

+0

В .Net 4.5, вы можете использовать CallerMemberNameAttribute, чтобы получить имя вызывающего абонента. См. Https://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.callermembernameattribute(v=vs.110).aspx ... Затем вы можете обернуть тело своей функции анонимной функцией как in ([CallerMemberName] string functionName = "") => {}. Проблемы с использованием метода отражения, как и в принятом ответе, заключаются в том, что (1) функция может быть встроена, и/или (2) имя функции может быть запутано, если оно не является общедоступным, а код запутан. – GreatAndPowerfulOz

ответ

102

Попробуйте это:

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

Именно это. Спасибо – Jack

+5

Для пользователей, использующих .Net 4.5, есть [CallerMemberNameAttribute] (https://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.callermembernameattribute.aspx) –

14

Вы можете проверить трассировку стека

using System.Diagnostics; 

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

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

Но будьте осторожны, если метод встраиваемыми вы получите имя метода родителя.

Смежные вопросы