1

.ToList()LINQ クエリを作成して追加すると、その LINQ クエリが実行され、リスト オブジェクトが返されることを理解しています。ただし、これを行わないと、代わりに、私が理解しているように、まだソートされていない IOrderedQueryable オブジェクトが取得されます。

そのコレクションを For Each ステートメントに配置すると、この時点でリストは順序付けされますか? そして、これは本質的に、そのコレクションの GetEnumerator のデフォルトの実装をオーバーライドしたということですか?

4

1 に答える 1

1

あなたが言及しているのは、遅延実行として知られています。これが基本的に必要とするのは、 を呼び出さない限りToList()ToArray()または LINQ クエリを直接コレクションにキャストする他のメソッドを呼び出さない限り、そのクエリは、割り当てられた変数が使用される瞬間に実行されるということです。

クエリが使用されるまで、IEnumerableは列挙されません。GetEnumeratorただし、遅延実行の場合はオーバーライドされないと思います。

この特定の主題に関する MSDN ブログは次のとおりです

于 2013-09-12T08:42:14.803 に答える