我用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());
}
}
Run Code Online (Sandbox Code Playgroud)
使用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,还添加了编译器版本 请解释.
从c#5开始,循环变量in foreach被编译为使其存在于循环范围内而不是在它之外.
这意味着当您关闭循环变量时,会得到不同的结果.
以下是Eric Lippert对原始问题所说的话.
| 归档时间: |
|
| 查看次数: |
1367 次 |
| 最近记录: |