我有课SomeObject
其中有一个功能Evaluate()
返回一个 bool 值。如果我有一个 IList<SomeObject>
像这样:
IList<SomeObject> parameters;
parameters.Add( objA );
parameters.Add( objC );
parameters.Add( objB );
我应用了像 Any
这样的 Linq 表达式或All
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>
的所有框架实现),它将是列表中项目的索引顺序,但接口(interface)似乎不能保证这一点,因此实现可以做任何它想做的事情。
关于c# - 在 IList 上使用 Linq 方法 .Any(<predicate>) 和 .All(<predicate>) 时,谓词是否按严格顺序应用于列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43761136/