[英]When using the Linq methods .Any(<predicate>) and .All(<predicate>) on an IList, are the predicates applied to the list in a strict sequence?
我有一个SomeObject
类,它有一个函数Evaluate()
,它返回一个bool。 如果我有一个像这样的IList<SomeObject>
:
IList<SomeObject> parameters;
parameters.Add( objA );
parameters.Add( objC );
parameters.Add( objB );
我应用了像Any
或All
这样的Linq表达式
var res = parameters.Any( p => p.Evaluate() );
谓词p.Evaluate()
评估顺序是什么? 可不可能是
objA
然后objB
然后objC
(假设SomeObject
是可排序的并且objA
< objB
< objC
) objA
然后objC
然后objB
(它们被Add
到IList<>
的顺序) 或者评估的顺序不是可以依赖的东西?
LINQ在IEnumerable<T>
实例上运行,因此根据定义,应用操作的顺序几乎就是底层枚举器返回它们的顺序。
但是, IList<T>
无法保证枚举订单项。 在绝大多数情况下(可能是IList<T>
所有框架实现),它将是列表中项目的索引顺序,但接口似乎并不能保证,因此实现可以做任何想做的事情。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.