ExpressionTree。在二进制表达式中使用Lambda表达式

时间:2018-03-30 06:42:47

标签: c# linq lambda expression-trees

有没有办法在二进制表达式中使用lambdas(如Add,Subtract等)作为参数。

        Expression<Func<double>> foo = () => 5.5;
        Expression<Func<double>> bar = () => 10.5;
        Expression<Func<double>> res = Expression.Lambda<Func<double>>(Expression.Add(bar, foo));
        Console.WriteLine(res.Compile()());

抛出System.InvalidOperationException:没有为类型'System.Func 1[System.Double]' and 'System.Func 1 [System.Double]'定义二进制运算符Add。

我知道ConstantExpression。我只想调用lambdas并将结果用于算术计算。这甚至可以实现吗?我清楚地忽略了表达树如何实现的一些基础知识。

编辑:我发现在参数中使用MethodCallExpression代替Expression<Func<double>>可以实现类似的功能。但问题仍然存在。

1 个答案:

答案 0 :(得分:2)

将添加行替换为以下

var res = Expression.Lambda<Func<double>>(Expression.Add(bar.Body, foo.Body));

它会起作用。

相关问题