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

标签 c# linq

我有课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/

相关文章:

c# - 从不同的服务器获取 CLR Procedure 中的数据

c# - 获取唯一元素

c# - 如何在 Dict<int,List<Tuple<string,string>>> 中查找键,以便列表包含具有给定 Item1 和 Items 的元素

c# - 无效操作异常 : An exception was thrown while attempting to evaluate a LINQ query parameter expression

linq - 您将如何编写LINQ to SQL的Upsert?

c# - 如何使用 LINQ 对基于 StatrtWith 的字符串列表进行排序

c# - 为什么 Selenium InternetExplorerDriver Webdriver 在 Debug模式下非常慢(visual studio 2010 和 IE9)

c# - 我如何优先考虑 WPF 文本框自动换行?

c# - ConcurrentDictionary ContainsKey 方法是否同步?

c# - XML 到字符串列表