这是从Access到Modified Closure的扩展。我只想验证以下内容是否真的足够安全用于生产。List<string> lists = new List<string>();//Code to retrieve lists from DB foreach (string list in lists){ Button btn = new Button(); btn.Click += new EventHandler(delegate { MessageBox.Show(list); });}每次启动我只会执行一次以上操作。目前看来,它工作正常。正如乔恩(Jon)在某些情况下提到的违反直觉的结果。那么,我需要在这里注意什么?如果列表多次运行,可以吗?
3 回答
aluckdog
TA贡献1847条经验 获得超7个赞
这很棘手,但是上面的解释对我来说很清楚: 这似乎是正确的,但实际上,每当单击任何按钮时,只会使用str变量的最后一个值。这样做的原因是foreach进入了while循环,但是迭代变量是在该循环之外定义的。这意味着,当您显示消息框时,str的值可能已经被迭代为字符串集合中的最后一个值。
- 3 回答
- 0 关注
- 447 浏览
添加回答
举报
0/150
提交
取消