0

カスタム オブジェクトを含む ArrayList を使用しようとしています。配列リストがソートされます。LINQ to objects を使用して複数のフィールドを検索しています。オブジェクト検索への LINQ は、基になる並べ替えを使用するか、配列リスト全体をスキャンします。

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 に答える