C# 3.5 および 4.0 で次のコードを実行しました。結果はまったく異なります。
static void Main()
{
int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
List<IEnumerable<int>> results = new List<IEnumerable<int>>();
foreach (var num in numbers)
{
results.Add(numbers.Where(item => item > num));
}
foreach (var r in results)
{
Console.WriteLine("{0}", r.Count());
}
}
Microsoft (R) Visual C# 2008 Compiler バージョン 3.5.30729.5420 では、出力は0 0 0 0 0 0 0 0 0 0
.
しかし、Microsoft (R) Visual C# Compiler バージョン 4.0.30319.17929 では、出力は9 8 7 6 5 4 3 2 1 0
.
これは遅延実行または遅延評価が原因であるというかすかな考えがありますが、ここでさまざまな出力にどのように責任があるかを明確に理解していません。
訂正: .NET 3.5 および 4.5 であり、コンパイラのバージョンも追加されまし た。説明してください。