拡張方法はどのように機能しToList()
ますか?IEnumerable
10000個のアイテムがあるとします。ToList()
新しいアイテムを作成し、10000個のアイテムをList
繰り返し処理してから、を返しますか、それとも.NETは他の方法でそれを行いますか?IEnumerable
List
このMSDNリンクでは、DBクエリの即時実行について説明しています。私の質問は、に変換することだけIEnumerable
ですList
。
拡張方法はどのように機能しToList()
ますか?IEnumerable
10000個のアイテムがあるとします。ToList()
新しいアイテムを作成し、10000個のアイテムをList
繰り返し処理してから、を返しますか、それとも.NETは他の方法でそれを行いますか?IEnumerable
List
このMSDNリンクでは、DBクエリの即時実行について説明しています。私の質問は、に変換することだけIEnumerable
ですList
。
これは「最悪の場合」のシナリオですが、必ずしも反復する必要はありません。基本的にはを呼び出しますがnew List<T>(source)
、それにはいくつかのトリックがあります。ソースがを実装している場合ICollection<T>
、コンストラクターICollection<T>.CopyTo()
は完全なデータを配列にコピーするために呼び出すことができます。これは、シングルステップの反復よりも効率的に実装できます。同様に、このICollection<T>
場合、新しいリストは最初に最終的なサイズを認識しているため、内部バッファーを拡張し続ける必要はありません。
詳細については、EdulinqのToList()
ブログ投稿を参照してください。
.ToList
拡張メソッドはコンストラクターを呼び出し、コンストラクList<T>
ターを渡しますIEnumerable<T>
。このコンストラクターは、を繰り返し処理し、の要素を返されるのと同じ順序でIEnumerable<T>
コピーします。IEnumerable<T>