2012-11-28 19 views
5

Ho una funzione che prende un puntatore a funzioneCome ottenere il nome della funzione dal puntatore della funzione in C#?

come

public void myfunc<a,b>(Func<a,b> functionpointer) 
{ 
    String functionname; 
    // Do some magic to get functionpointers name and set it to functionname 
} 

E 'possibile ottenere il nome della funzione senza eseguirlo?

So che è possibile ottenere il nome funzione della funzione attualmente in esecuzione, ma come si ottiene il nome di una funzione che si intende chiamare?

Perdonami se una questione del genere potrebbe essere stato pubblicato in precedenza, non riesco a trovare una soluzione per esso in C#

+1

Si noti che le funzioni "anonime" potrebbero fornire informazioni utili. Aiuta a conoscere la funzione "nome" per una chiamata come "myfunc (x => x.Blah)'? – dlev

risposta

7

È possibile utilizzare MemberInfo.Name Property

string functionname = functionpointer.Method.Name; 
+0

In termini di prestazioni, quanto dovrebbe essere grande? È pesante? –

+0

@BrijeshBharadwaj, è una proprietà della funzione 'Func'. Non sarà affatto pesante, credo. Anche se vi è un effetto sulle prestazioni di accesso al getter sarebbe trascurabile. – Habib

+0

@BrijeshBharadwaj Penso che la prima domanda dovrebbe essere, questo restituisce davvero il nome che si desidera o un nome casuale generato dal compilatore. –

0
public void myfunc<a, b>(Expression<Func<a, b>> expr) 
{ 
    Func<a, b> functionpointer = expr.Compile(); 

    String functionname = ""; 
    var mce = expr.Body as MethodCallExpression; 
    if(mce!=null) 
    { 
     functionname = mce.Method.Name; 
    } 
} 
0

utilizzare la riflessione

foreach (Type objType in assembly.GetTypes()) 
       { 
        //List<string> listInner = new List<string>(); 
        var listInner = new HashSet<string>(); 
        listInner.Add(objType.FullName); 
        foreach (MemberInfo obMember in objType.GetMembers()) 
        { 
         listInner.Add(obMember.MemberType + " " + obMember.ToString()); 

        } 
       } 
Problemi correlati