这是从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)在某些情况下提到的违反直觉的结果。那么,我需要在这里注意什么?如果列表多次运行,可以吗?
18
恭喜,您现在已成为Resharper文档的一部分。confluence.jetbrains.net/display/ReSharper/…–
—
Kongress
这很棘手,但是上面的解释对我来说很清楚: 这似乎是正确的,但实际上,每当单击任何按钮时,只会使用str变量的最后一个值。这样做的原因是foreach进入了while循环,但是迭代变量是在该循环之外定义的。这意味着,当您显示消息框时,str的值可能已经被迭代为字符串集合中的最后一个值。
—
DanielV