20/01/11 13:39:12.14 eNMw2FnY.net
なんかごめんね
このLINQの実装を解説して終わる
URLリンク(github.com)">URLリンク(jump.5ch.net))
seq = list.Where(A).Where(B);
↓↓↓
// 一つ目のWhereはIEnumerable拡張
if(source is List<T> list){
return new WhereListIterator<T>(list, A);
}
// 二つ目のWhereはWhereListIteratorクラス
return new WhereListIterator<T>(list, CombinePredicates(A, B));
結果として宣言時のseqに入るのは二つ目のWhereListIteratorインスタンス
チェーンの中ではList実体をバトンリレーしてるから入れ子にはなっていない
MoveNext()が取得するのはlist.GetEnumerator()から取得した唯一の値であって間に挟まれたIEnumはまったく関係ない
これ以上分かりやすく伝えるのは俺には無理だ