2012-09-14 48 views
0

我想使用包含自定義對象的ArrayList。數組列表已排序。我使用LINQ來對象在多個字段上進行搜索。 LINQ到對象搜索使用底層排序,或者它將掃描整個數組列表。LINQ to Objects和排序順序

+3

不要再使用'ArrayLists',而是使用字符串鍵入'List '。 –

回答

1

LINQ擴展方法不會利用基礎排序。這些方法被編寫爲在IEnumerable上工作,因此不能假設底層集合的任何內容。從實現的角度來看,一些LINQ方法將檢查輸入是否是ICollection,如果是這樣,調用相應的方法(我相信Count()以這種方式工作)可能避免進行線性掃描,但在這種情況下,沒有辦法讓LINQ檢測你的數組是否被排序,所以它不能利用這個事實。

此外,如果你正在做的事情一樣myList.Where(O => o.Prop1 & o.Prop2 == 3)中,func <>傳遞到哪裏()是完全不透明的LINQ,所以即使它知道列表已被排序,也無法找出正在檢查哪些屬性。