0
我有一个List<string>
,我想迭代这个集合,并在按钮单击时对每个字符串执行一些操作。我这里有一个小例子来说明我想要做的事:迭代列表并使用匿名函数内的对象
//items is a System.Collections.Generic.List<string>
foreach (string s in items)
{
Button b = new Button() { Content = s };
b.Click += (obj, ev) =>
{
MessageBox.Show(s);
}
//add b to form, container, etc...
}
正如你所期望的按钮与正确的内容适当地创建,但是当我点击任何按钮,里面的文字MessageBox
始终是items
中的最后一个字符串。我错过了什么?为什么按钮的所有Click
函数都被传递到集合中的最后一项?
注意Eric Lippert关于此的博客条目:** [第1部分](http://blogs.msdn.com/b/ericlippert/archive/2009/11/12/closing-over-the-loop-variable-被认为有害.aspx)**和** [第2部分](http://blogs.msdn.com/b/ericlippert/archive/2009/11/16/closing-over-the-loop-variable-part- two.aspx)** – Timwi 2011-04-04 17:17:45
+1辉煌,这是做的伎俩。感谢您的链接,精彩文章。 – jmccarthy 2011-04-04 17:32:29