>>969
例えばこんなLINQがあるとするだろ
var seq = list.Where(A).Where(B).Where(C);
foreach(var n in seq) Console.WriteLine(n);

内部的にはこの処理と同じ
var tmp = list.GetEnumerator();
while(tmp.MoveNext()){
var n = tmp.Current;
if(!A(n)) continue;
if(!B(n)) continue;
if(!C(n)) continue;
Console.WriteLine(n);
}

取り出した要素をチェーンに繋いである関数に順番に渡してるだけ
要素一つにMoveNextを何回も呼んでるわけじゃない