有没有办法在二进制表达式中使用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>>
可以实现类似的功能。但问题仍然存在。
答案 0 :(得分:2)
将添加行替换为以下
var res = Expression.Lambda<Func<double>>(Expression.Add(bar.Body, foo.Body));
它会起作用。