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

..但是是否有一种可靠且简单的方法可以为方法做同样的事情?

4

1 回答 1

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

如果您可以尝试使用泛型,您也可以使用泛型做一些事情。

于 2011-02-11T13:03:54.853 回答