为了账号安全,请及时绑定邮箱和手机立即绑定

访问修改后的闭包(2)

访问修改后的闭包(2)

慕森王 2019-10-08 11:11:05
这是从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的值可能已经被迭代为字符串集合中的最后一个值。

查看完整回答
反对 回复 2019-10-08
  • 3 回答
  • 0 关注
  • 432 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信