8

拡張方法はどのように機能しToList()ますか?IEnumerable10000個のアイテムがあるとします。ToList()新しいアイテムを作成し、10000個のアイテムをList繰り返し処理してから、を返しますか、それとも.NETは他の方法でそれを行いますか?IEnumerableList

このMSDNリンクでは、DBクエリの即時実行について説明しています。私の質問は、に変換することだけIEnumerableですList

4

2 に答える 2

22

これは「最悪の場合」のシナリオですが、必ずしも反復する必要はありません。基本的にはを呼び出しますがnew List<T>(source)、それにはいくつかのトリックがあります。ソースがを実装している場合ICollection<T>、コンストラクターICollection<T>.CopyTo()は完全なデータを配列にコピーするために呼び出すことができます。これは、シングルステップの反復よりも効率的に実装できます。同様に、このICollection<T>場合、新しいリストは最初に最終的なサイズを認識しているため、内部バッファーを拡張し続ける必要はありません。

詳細については、EdulinqのToList()ブログ投稿を参照してください。

于 2012-12-06T06:49:50.483 に答える
3

.ToList拡張メソッドはコンストラクターを呼び出し、コンストラクList<T>ターを渡しますIEnumerable<T>。このコンストラクターは、を繰り返し処理し、の要素を返されるのと同じ順序でIEnumerable<T>コピーします。IEnumerable<T>

于 2012-12-06T06:50:38.133 に答える