2011-02-11 72 views
2

尋找需要能夠得到聲明方式方法名(AOP,反射等),使得編譯器檢查強制斷變化等很好的例子:聲明式綁定方法名稱?

invocation.Method.Name.Equals("GetAll" 

..是有辦法用lambda /泛型方法來做這件事,所以我不必將方法名稱作爲字符串文字? 我用這樣的事情之前得到屬性名稱:

public static string GetPropertyName<T, P>(Expression<Func<T, P>> propSelector) 
     where T : class 
    { 
     return (propSelector.Body as MemberExpression).Member.Name; 
    } 

..但有一個可靠和簡便的方法做的方法一樣嗎?

回答

0

你可以做這樣的事情與代表:

public static string MethodName(Delegate d) { 
    return d.Method.Name; 
} 

// and to use... 
MethodName(new Func<object, int>(Convert.ToInt32)); 

如果有你使用特定的委託簽名,您可以創建特定的重載:

public static string MethodName(Func<object, int> d) { 
    return MethodName((Delegate)d); 
} 

MethodName(Convert.ToInt32); 

您可能還可以做一些事情與泛型,如果你有玩它。