2010-02-12 4 views
6

Jak uzyskać nazwę pierwszej metody wywoływanej z wyrażenia w języku C#? Coś takiego fikcyjnego MethodUtils.NameFromExpression() poniżej:nazwa metody wyodrębniania z wyrażenia linq

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

Idealnie każda metoda util byłby napisany/przeciążony w taki sposób, aby mogła ona podjąć wyrażeń za wszelkie działania lub func typów delegatów.

Z góry dziękuję.

UPDATE

znalazłem odpowiedź (poniżej), ale mimo to chcielibyśmy wejściowych, czy jest to dobre rozwiązanie, czy istnieje już sposób robi to w plc.

+0

Sprawdź moją odpowiedź na http://stackoverflow.com/questions/9412182/get-the-names-of-interface-methods-strong-typed/32245698#32245698 HTH .. – ShloEmi

Odpowiedz

10

Trochę kłopotu z debugera i mam odpowiedzi na moje własne pytanie:

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; 
    } 
} 

Wszelkie uwagi na temat tej realizacji?

+0

Dokładnie to, co miałem sugerować! – LukeH

+0

"Jakieś uwagi na temat tej implementacji?" ==> Sprawdź moją odpowiedź na http://stackoverflow.com/questions/9412182/get-the-names-of-interface-methods-strong-typed/32245698#32245698 – ShloEmi