Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.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# 构建接受表达式列表的自定义求和函数的更好方法_C#_Lambda_Sum_Expression_Add - Fatal编程技术网

C# 构建接受表达式列表的自定义求和函数的更好方法

C# 构建接受表达式列表的自定义求和函数的更好方法,c#,lambda,sum,expression,add,C#,Lambda,Sum,Expression,Add,我定义了以下方法: public static Expression Sum(IList<Expression> expressions) { Expression result = expressions[0]; foreach (var expression in expressions.Skip(1)) { result = Expression.Add(result, expression); } return res

我定义了以下方法:

public static Expression Sum(IList<Expression> expressions)
{
    Expression result = expressions[0];
    foreach (var expression in expressions.Skip(1))
    {
        result = Expression.Add(result, expression);
    }

    return result;
}
但是,当添加大量表达式时,我认为性能不好


因此,我想知道是否可以创建一个使用Enumerable.Sum或Queryable.Sum的方法来完成这项工作。

我想您是在重新定义聚合方法,该方法使用了以前的
Add
表达式和表达式列表的当前表达式。将代码更改为:

return expressions.Aggregate((previousExpr, currentExpr) => Expression.Add(previousExpr, currentExpr));
我不确定这是否更快,但更干净。
previousExpr
包含要求和的表达式结果

为什么不
var value=42+10
;你对使用表达式有什么要求?是否要添加2个表达式,或表达式列表,或表达式列表和整数列表…?为什么要使用表达式树对两个数字求和?表达式树有两个主要用途:与实体框架(或类似框架)一起使用,以及构建必须多次重用的动态代码。对不起,您在这里想做什么。提高性能的最佳方法是进行一次编译。我正在尝试构建一个excel公式解析器,将公式解析为linq表达式树。请参阅此处的示例:@stefheynrath那么问题可能是生成编译后的表达式后没有缓存它。@xanatos有什么建议吗?谢谢。更简短的代码可能是:return expressions.Aggregate(Expression.Add);
return expressions.Aggregate((previousExpr, currentExpr) => Expression.Add(previousExpr, currentExpr));