2011-02-11 84 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); 

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