【发布时间】:2011-07-22 18:29:16
【问题描述】:
我试图理解这个问题的答案Why am I getting wrong results when calling Func<int>? 我写了一些示例代码。以下代码
public static void Main(string[] args)
{
var funcs = new List<Func<string>>();
for(int v=0,i=0;v<3;v++,i++)
{
funcs.Add( new Func<string>(delegate(){return "Hello "+ i++ +" "+v;}) );
}
foreach(var f in funcs)
Console.WriteLine(f());
}
产生
Hello 3 3
Hello 4 3
Hello 5 3
在阅读了 Jon Skeet 和 Eric Lippert 的解释后,我想我会明白的
Hello 3 3
Hello 3 3
Hello 3 3
这里 v 和 i 都是循环变量,而 i 的值是在那一刻被拾取的 v 不是为什么会这样?。我不明白这种行为。
【问题讨论】:
-
您意识到您将
i增加了两次? -
是的,增量是有意的。我只是想检查一下。这就是这个问题的根本原因。