将方法组转换为表达式

时间:2009-06-16 21:54:17

标签: c#-3.0 lambda expression method-group

我试图弄清楚是否有将语法组转换为表达式的简单语法。使用lambdas似乎很容易,但它并没有转化为方法:

鉴于

public delegate int FuncIntInt(int x);

以下所有内容均有效:

Func<int, int> func1 = x => x;
FuncIntInt del1 = x => x;
Expression<Func<int, int>> funcExpr1 = x => x;
Expression<FuncIntInt> delExpr1 = x => x;

但是,如果我尝试使用实例方法,它会在表达式中分解:

Foo foo = new Foo();
Func<int, int> func2 = foo.AFuncIntInt;
FuncIntInt del2 = foo.AFuncIntInt;
Expression<Func<int, int>> funcExpr2 = foo.AFuncIntInt; // does not compile
Expression<FuncIntInt> delExpr2 = foo.AFuncIntInt;      //does not compile

最后两个都无法编译“无法将方法组'AFuncIntInt'转换为非委托类型'System.Linq.Expressions.Expression&lt; ...&gt;'。您打算调用该方法吗?”

在表达式中捕获方法组有一个很好的语法吗?

感谢, ·阿尔

3 个答案:

答案 0 :(得分:8)

这个怎么样?

  Expression<Func<int, int>> funcExpr2 = (pArg) => foo.AFuncIntInt(pArg);
  Expression<FuncIntInt> delExpr2 = (pArg) => foo.AFuncIntInt(pArg);

答案 1 :(得分:0)

也可以使用NJection.LambdaConverter代理到LambdaExpression转换器库

来实现
public class Program
{
    private static void Main(string[] args) {
       var lambda = Lambda.TransformMethodTo<Func<string, int>>()
                          .From(() => Parse)
                          .ToLambda();            
    }   

    public static int Parse(string value) {
       return int.Parse(value)
    } 
}

答案 2 :(得分:0)

我使用属性而不是方法。

public class MathLibrary
{
    public Expression<Func<int, int>> AddOne {  
        get {   return input => input + 1;} 
    }
}

在上方使用

enter image description here