|
■No82191 (魔界の仮面弁士) に追記の追記 > Reference Source によれば、各メソッドは、 > LINQ ソースに対して、後述の順番で処理されるようです。
今回は、元質問が IList<T> に対するものだったので、 System.Linq.Enumerable 系の拡張メソッドについて調査しました。
それ以外の LINQ (特に式木タイプ)の場合、また違う結果になるものも あるのかも知れませんが、そこまでは調査していません。
■No82184 (ぶなっぷ さん) に返信 > よく考えたら、LINQって遅延評価だよね。
ほとんどの LINQ は遅延評価として実装されていますが、 遅延評価であることが強制されているわけではありません。
たとえば、 int[] intArray = Foo(); var q1 = from a in intArray where a < 0 select a; var q2 = intArray.Where(b => b < 0); の場合、通常であればどちらも遅延評価となりますが、 極端な話、 public static IEnumerable<int> Where(this int[] x, Func<int, bool> dummy) のような拡張メソッドを用意しておけば、 ・ラムダ式が即時評価されるパターン ・ラムダ式が全く呼ばれず無視されるパターン なんてこともありうるわけで。
|