C# 表情树。在二进制表达式中使用Lambda表达式
有没有办法在二进制表达式(如加法、减法等)中使用lambda作为参数C# 表情树。在二进制表达式中使用Lambda表达式,c#,linq,lambda,expression-trees,C#,Linq,Lambda,Expression Trees,有没有办法在二进制表达式(如加法、减法等)中使用lambda作为参数 Expression<Func<double>> foo = () => 5.5; Expression<Func<double>> bar = () => 10.5; Expression<Func<double>> res = Expression.Lambda<Func<doub
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()());
expressionfoo=()=>5.5;
表达式条=()=>10.5;
表达式res=Expression.Lambda(Expression.Add(bar,foo));
Console.WriteLine(res.Compile());
这会引发System.InvalidOperationException:未为类型“System.Func1[System.Double]”和“System.Func
1[System.Double]”定义二进制运算符Add
我知道ConstantExpression
。我只想调用lambdas并将结果用于算术计算。这甚至可以实现吗?我显然缺少了一些关于表达式树如何实现的基本知识
EDIT:我发现类似的事情可以通过在参数中使用
MethodCallExpression
而不是表达式来实现。但问题仍然相关。将添加行替换为以下内容
var res = Expression.Lambda<Func<double>>(Expression.Add(bar.Body, foo.Body));
var res=Expression.Lambda(Expression.Add(bar.Body,foo.Body));
它将起作用。将添加行替换为以下内容
var res = Expression.Lambda<Func<double>>(Expression.Add(bar.Body, foo.Body));
var res=Expression.Lambda(Expression.Add(bar.Body,foo.Body));
它会起作用的。这很有帮助。谢谢!这很有帮助。谢谢!