一旦结果不再更改,C#LINQ Aggregate方法是否完成执行?

Kev*_*ree 4 c# linq

我知道如果我在同一个语句中链接&&||运算符,c#将停止计算语句并在计算表达式时返回相应的结果,无论以下表达式是什么,结果都不会改变.例如:

var result = false && foo() && bar();
Run Code Online (Sandbox Code Playgroud)

在此语句中,由于第一个表达式为false foo(),bar()因此永远不会执行.我的问题是,Enumerable.Aggregate<TSource,?TAccumulate>当在一个bool列表上运行时会做同样的事情还是会评估所有表达式而不管?例如:

var result = new List<bool>
{
    false,
    foo(),
    bar()
}.Aggregate(true, (acc, x) => acc && x);
Run Code Online (Sandbox Code Playgroud)

Ser*_*rvy 5

&&你的例子中的操作员会短路,是的. x不会被评估的任何时间accfalse.

当然,需要为每个元素执行整个谓词. Aggregate没有办法知道以后执行它不会改变聚合值.

您的聚合函数实际上是All对数据集执行操作,如果您使用该All操作,而不是更通用Aggregate,它能够在给定谓词确定false结果已知且无法更改时确定,并且不需要在其余元素上调用谓词(就像找到值Or时一样true).

  • 奇怪的投票模式......似乎选民并不真正理解这里发生了什么. (2认同)