我有这段代码:
int i = 0;
foreach(var tile in lib.dic.Values)
{
var ii = i;
var t = tile;
Button b = new Button( () = > { MainStatic.tile = t; } );
Checkbox c = new Checkbox( () = > { lib.arr[ii].b = !lib.arr[ii].b; } );
i++;
}
虽然上面的代码可以正常工作,但下面这段代码:
int i = 0;
foreach(var tile in lib.dic.Values)
{
Button b = new Button( () = > { MainStatic.tile = tile; } );
Checkbox c = new Checkbox( () = > { lib.arr[i].b = !lib.arr[i].b; } );
i++;
}
...将始终使用最后的值执行代表i
and tile
变量。为什么会发生这种情况,为什么我必须制作这些变量的本地副本,尤其是非引用类型int i
?
已知“问题”,请查看 Eric 的博客闭包,捕获的变量。
Microsoft 决定进行重大更改,并在 C# 5 中修复它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)