2008-11-11 19 views
5

cerrada como duplicado exacto de "How can I find the method that called the current method?"¿Cómo se encuentra la función de llamada?

Es this posible con C#?

void main() 
{ 
    Hello(); 
} 

void Hello() 
{ 
    // how do you find out the caller is function 'main'? 
} 
+0

http://stackoverflow.com/questions/171970/how-can-i-find-the-method-that-called-the-current-method? –

+0

Esta pregunta es un duplicado de [http://stackoverflow.com/questions/171970/how-can-i-find-the-method-that-llamado-la-actualidad-método(http://stackoverflow.com/questions/171970/how-can-i-find-the-method-that-called-the-current-method) –

Respuesta

17
Console.WriteLine(new StackFrame(1).GetMethod().Name); 

Sin embargo, esto no es robusta, especialmente en lo que optimizaciones (tales como procesos en línea JIT) puede mono con los marcos de pila percibidas.

+0

Hola, Marc. ¿Sería posible, debido a JIT, que un nombre de método podría cambiar durante Runtime? – Joe

+0

@Joe es ciertamente posible no obtener lo que esperaba *, lo que podría deberse a la creación de líneas internas, o debido a métodos generados por el compilador para cosas como métodos anónimos y bloques de iteradores. No esperaría que se cambiara de nombre repentinamente por completo, a menos que esté usando un ofuscador. –

3

De here:

System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace(1); 
System.Diagnostics.StackFrame sf = st.GetFrame(0); 
string msg = sf.GetMethod().DeclaringType.FullName + "." + 
sf.GetMethod().Name; 
MessageBox.Show(msg); 

Pero también hay una observación que esto no podía trabajar con múltiples hilos.

+1

Muchas gracias por mencionar el comentario. Me preguntaba por qué obtuve una 'NullReferenceException' cuando intenté obtener el nombre del método dentro de un nuevo hilo. – Animesh

Cuestiones relacionadas