2010-02-12 10 views
6

Come posso ottenere il nome del primo metodo chiamato da un'espressione in C#? Qualcosa di simile l'immaginario MethodUtils.NameFromExpression() di seguito:nome del metodo di estrazione dall'espressione linq

Expression<Action<string>> expr = s => s.Trim(); 
Assert.AreEqual("Trim", MethodUtils.NameFromExpression(expr)); 

Idealmente qualsiasi metodo util sarebbe stata scritta/sovraccarico in modo tale che si potrebbe prendere le espressioni per qualsiasi tipo di delegato Func Azione o.

Grazie in anticipo.

UPDATE

ho trovato una risposta (sotto), ma desidera comunque in ingresso sul fatto che questa è una buona soluzione, o se esiste già un modo di fare questo nel BCL.

+0

Controllare la mia risposta al http://stackoverflow.com/questions/9412182/get-the-names-of-interface-methods-strong-typed/32245698#32245698 HTH .. – ShloEmi

risposta

10

Un po 'di scavo con il debugger e ho risposto alla mia domanda:

public static class MethodUtils 
{ 
    public static string NameFromExpression(LambdaExpression expression) 
    { 
     MethodCallExpression callExpression = 
      expression.Body as MethodCallExpression; 

     if(callExpression == null) 
     {     
      throw new Exception("expression must be a MethodCallExpression"); 
     } 

     return callExpression.Method.Name; 
    } 
} 

Eventuali commenti su questa implementazione?

+0

Esattamente quello che stavo per suggerire! – LukeH

+0

"Qualche commento su questa implementazione?" ==> Controlla la mia risposta su http://stackoverflow.com/questions/9412182/get-the-names-of-interface-methods-strong-typed/32245698#32245698 – ShloEmi

Problemi correlati