我使用 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 编译器版本 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,还添加了编译器版本, 请解释。