2012-04-12 22 views
44

Duplicar posible:
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¿Cómo obtener el nombre de la función actual?

Por ejemplo:

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

de impresión: foo

i Es posible hacerlo en C#?

+0

En .Net 4.5, puede utilizar CallerMemberNameAttribute para obtener el nombre de la persona que llama. Consulte https://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.callermembernameattribute(v=vs.110).aspx ... Puede ajustar el cuerpo de su función en una función anónima como in ([CallerMemberName] string functionName = "") => {}. Los problemas con el uso del método de reflexión como en la respuesta aceptada son que (1) la función puede estar en línea y/o (2) el nombre de la función puede estar ofuscado si no es público y el código está ofuscado. – GreatAndPowerfulOz

Respuesta

102

Prueba esto:

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

Exactamente. Gracias – Jack

+5

Para las personas que usan .Net 4.5, hay [CallerMemberNameAttribute] (https://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.callermembernameattribute.aspx) –

14

Puede comprobar el seguimiento de la pila

using System.Diagnostics; 

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

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

Pero cuidado, si el método se colocarán en línea se obtiene el nombre del método de los padres.

Cuestiones relacionadas