【发布时间】:2010-02-09 03:13:12
【问题描述】:
目前我来自函数式编程背景,如果我不了解 C# 中的闭包,请见谅。
我有以下代码来动态生成获取匿名事件处理程序的按钮:
for (int i = 0; i < 7; i++)
{
Button newButton = new Button();
newButton.Text = "Click me!";
newButton.Click += delegate(Object sender, EventArgs e)
{
MessageBox.Show("I am button number " + i);
};
this.Controls.Add(newButton);
}
我希望文本 "I am button number " + i 在 for 循环的迭代中以 i 的值关闭。但是,当我实际运行程序时,每个 Button 都会显示I am button number 7。我错过了什么?我用的是VS2005。
编辑:所以我想我的下一个问题是,我如何捕获价值?
【问题讨论】:
-
你没有捕捉到价值。您永远不会捕获值,只会捕获变量。有关此问题的更多信息,请参阅 blogs.msdn.com/ericlippert/archive/2009/11/12/… 和 blogs.msdn.com/ericlippert/archive/2009/11/16/…
标签: c# delegates anonymous-methods closures