Select
要素の順序を変更しません。これはストリーミング オペレーター (MSDN)です。つまり、ソース要素をソースの順序で処理し、射影された要素を 1 つずつ生成します。
したがって、順序付けられたソースの射影を行っている場合、射影された結果はソース要素の順序を保持します。
もう 1 つ - なぜ result が実装されないのか不思議に思うかもしれませんIOrderedEnumerable<T>
:
int[] items = { 2, 3, 1, 8, 5 };
IEnumerable<int> query = items.OrderBy(i => i).Select(i => i);
bool isOrdered = query is IOrderedEnumerable<int>; // false
これは、オペレーターが、ソース コレクション (この場合) から項目を 1 つずつ読み取り、項目を射影し、射影をSelect
返す新しいイテレーター オブジェクト (この場合) を返すためです。この新しいイテレータ オブジェクトはインターフェイスを実装していません。シンプルなだけです。順序付きコレクションはイテレータのソースになりましたが、イテレータ自体ではありません。WhereSelectArrayIterator
OrderedEnumerable
IOrderedEnumerable<T>
IEnumerable<T>