Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 表情树。在二进制表达式中使用Lambda表达式_C#_Linq_Lambda_Expression Trees - Fatal编程技术网

C# 表情树。在二进制表达式中使用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

有没有办法在二进制表达式(如加法、减法等)中使用lambda作为参数

        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.Func
1[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));

它会起作用的。

这很有帮助。谢谢!这很有帮助。谢谢!