【问题标题】:Binding method names declaratively?以声明方式绑定方法名称?
【发布时间】:2011-02-11 08:55:48
【问题描述】:

发现需要能够以声明方式(用于 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;
    }

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

【问题讨论】:

    标签: reflection binding methods lambda declarative


    【解决方案1】:

    你可以对代表做这样的事情:

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

    如果你有兴趣的话,你也可以用泛型做一些事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-25
      • 1970-01-01
      • 2011-11-16
      相关资源
      最近更新 更多