2009-10-06 34 views

回答

8

絕對 - 但你會想這樣的方法簽名:

public static string GetMethodName<T>(Expression<Action<T>> action) 

(這意味着你將需要指定類型參數時,你怎麼稱呼它,才能使用lambda表達式)

示例代碼:

using System; 
using System.Linq.Expressions; 

class Test 
{ 
    void Foo() 
    { 
    } 

    static void Main() 
    { 
     string method = GetMethodName<Test>(x => x.Foo()); 
     Console.WriteLine(method); 
    } 

    static string GetMethodName<T>(Expression<Action<T>> action) 
    { 
     MethodCallExpression methodCall = action.Body as MethodCallExpression; 
     if (methodCall == null) 
     { 
      throw new ArgumentException("Only method calls are supported"); 
     } 
     return methodCall.Method.Name; 
    } 
} 
+0

如何從指定類型獲取方法名稱?即表達式 >>? – Shimmy 2012-01-26 06:26:12

+0

@Shimmy:說實話,你的意思並不清楚。可能值得一個新的問題? – 2012-01-26 06:28:31

+0

我想要這個函數:'靜態MethodInfo GetMethod(Expression >> method)',[here](http://rextester.com/XUQI41513)是我到目前爲止嘗試過的,但它返回'Delegate.CreateDelegate'方法。 – Shimmy 2012-01-26 06:36:38

1

你會NE ED是這樣的方法:

public static string GetMethodName<T>(Expression<Action<T>> expression) { 
    if (expression.NodeType != ExpressionType.Lambda || expression.Body.NodeType != ExpressionType.Call) 
     return null; 
    MethodCallExpression methodCallExp = (MethodCallExpression) expression.Body; 
    return methodCallExp.Method.Name; 
} 

呼叫這樣的:GetMethodName<string>(s => s.ToLower())將返回 「ToLower將」。