2010-02-12 33 views
6

如何獲取從C#中的表達式調用的第一個方法的名稱?像虛構MethodUtils.NameFromExpression()下面:從linq表達式中提取方法名稱

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

理想任何util的方法將被寫入/重載以這樣一種方式,它可以採取表達式任何行動或函數功能委託類型。

在此先感謝。

UPDATE

我找到了答案(下同),但仍希望輸入,這是否是一個很好的解決方案,或者是否已經存在於BCL這樣做的方式。

+0

檢查我的答案在http://stackoverflow.com/questions/9412182/get-the-names-of-interface-methods-strong-typed/32245698#32245698 HTH .. – ShloEmi 2015-08-27 13:27:58

回答

10

與調試挖了一下,我已經回答了我的問題:

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

在這個實施有何評論?

+0

正是我正要建議! – LukeH 2010-02-12 15:40:00

+0

「關於此實施的任何評論?」 ==>檢查我的答案在http://stackoverflow.com/questions/9412182/get-the-names-of-interface-methods-strong-typed/32245698#32245698 – ShloEmi 2015-08-27 13:29:00

相關問題