Fechamentos em delegados de manipulador de eventos em C #? [duplicado]
Esta pergunta já tem uma resposta aqui:
Variável capturada em um loop em C # 8 respostasEstou vindo de um plano de programação funcional no momento, então me perdoe se não entender os fechamentos em C #.
Eu tenho o seguinte código para gerar dinamicamente botões que recebem manipuladores de eventos anônimos:
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);
}
Eu esperava o texto"I am button number " + i
para ser fechado com o valor dei
nessa iteração do loop for. No entanto, quando eu executo o programa, todo botão dizI am button number 7
. o que estou perdendo? Estou usando o VS2005.
Edit: Então eu acho que minha próxima pergunta é: como capturar o valor?