オブジェクトへの 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);