操作委托使用在 foreach 循环外部声明的变量的最后一个值[重复]

2023-12-04

我有这段代码:

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(使用前将#替换为@)

操作委托使用在 foreach 循环外部声明的变量的最后一个值[重复] 的相关文章

随机推荐