0

我正在尝试使用包含自定义对象的 ArrayList。数组列表已排序。我正在使用 LINQ to 对象来搜索多个字段。LINQ to objects 搜索将使用底层排序,还是将扫描整个数组列表。

4

1 回答 1

1

LINQ 扩展方法不会利用底层排序。这些方法是为在 IEnumerable 上工作而编写的,因此不能对基础集合进行任何假设。从实现来看,一些 LINQ 方法将检查输入是否为 ICollection,如果是则调用相应的方法(我相信 Count() 以这种方式工作)可能避免进行线性扫描,但在这种情况下有LINQ 无法检测到您的数组是否已排序,因此它无法利用这一事实。

此外,如果您正在执行 myList.Where(o => o.Prop1 < 2 && o.Prop2 == 3) 之类的操作,则传递给 Where() 的 Func<> 对 LINQ 完全不透明,因此不可能即使它确实知道列表已排序,也可以找出正在检查的属性。

于 2012-09-15T00:41:48.400 回答