6

オブジェクトへの Linq は、任意の IEnumerable オブジェクトで機能します。変数

string[] foo = new string[] { };

var bar = new List<string>();

は両方ともIEnumerable<string>ですが、それぞれがいくつのアイテムを持っているか知りたい場合はLength、配列のCountプロパティとリストのプロパティを使用できます。またはCount、両方で機能する Linq のメソッドを使用することもできます。

問題は、Linq は、クエリされるオブジェクトの実際のタイプに応じて、メソッドごとに異なるアルゴリズムを実装するなど、何らかの最適化を提供するかどうかです。

私は次のようなものを想像します:

if (obj is Array<T>)
    DoSomethingForArray(obj as Array<T>);
else if (obj is List<T>)
    DoSomethingForList(obj as List<T>);
else if (obj is Collection<T>)
    DoSomethingForCollection(obj as Collection<T>);
else
   DoSomethingThatWorksForAnyIEnumerable(obj);
4

1 に答える 1

11

答えは次のとおりです。場合によって異なります。Linq 拡張メソッドは、可能なCount()場合は型がそのプロパティを実装ICollection<T>またはICollection使用しているかどうかを確認しCountますが、考えられるすべてのシナリオに対して最適化するわけではありません。

于 2012-12-18T20:42:44.983 に答える