在IList上使用Linq方法.Any(<predicate>)和.All(<predicate>)时,谓词是否以严格的顺序应用于列表?

时间:2017-05-03 13:12:47

标签: c# linq

我有一个类SomeObject,它有一个返回bool的函数Evaluate()。如果我有IList<SomeObject>这样的话:

IList<SomeObject> parameters;
parameters.Add( objA );
parameters.Add( objC );
parameters.Add( objB );

我应用了像AnyAll

这样的Linq表达式
var res = parameters.Any( p => p.Evaluate() );

谓词p.Evaluate()的评估顺序是什么?会不会是

  • objA然后objB然后objC(假设SomeObject可排序且objA&lt; objB&lt; objC
  • objA然后objC然后objB(他们Add IList<>的订单

或评估的顺序不是可以依赖的东西?

1 个答案:

答案 0 :(得分:5)

LINQ在IEnumerable<T>个实例上运行,因此根据定义,应用操作的顺序几乎就是底层枚举器返回它们的顺序。

但是,IList<T>无法保证枚举订单商品。在绝大多数情况下(可能是IList<T>的所有框架实现),它将是列表中项目的索引顺序,但接口似乎不能保证,所以一个实现可以做任何事情想。