我有一个类SomeObject
,它有一个返回bool的函数Evaluate()
。如果我有IList<SomeObject>
这样的话:
IList<SomeObject> parameters;
parameters.Add( objA );
parameters.Add( objC );
parameters.Add( objB );
我应用了像Any
或All
var res = parameters.Any( p => p.Evaluate() );
谓词p.Evaluate()
的评估顺序是什么?会不会是
objA
然后objB
然后objC
(假设SomeObject
可排序且objA
&lt; objB
&lt; objC
)objA
然后objC
然后objB
(他们Add
IList<>
的订单或评估的顺序不是可以依赖的东西?
答案 0 :(得分:5)
LINQ在IEnumerable<T>
个实例上运行,因此根据定义,应用操作的顺序几乎就是底层枚举器返回它们的顺序。
但是,IList<T>
无法保证枚举订单商品。在绝大多数情况下(可能是IList<T>
的所有框架实现),它将是列表中项目的索引顺序,但接口似乎不能保证,所以一个实现可以做任何事情想。