C # лямбда-выражение, значение переменной в области видимости - PullRequest
3 голосов
/ 27 мая 2011

привет, я пытаюсь написать лямбду для обработчика событий.поэтому я могу предоставить больше информации методу, который вызывается.

поэтому я делаю:

button.Click+=new EventHandler ((object sender, EventArgs args) => 
{ button_click (i, sender, args); });

где:

public void button_click (int i, object sender, EventArgs eventArgs)

ОК, так что это работает как вметод вызывается, но i всегда является последним известным значением i, я действительно хочу значение в точке, где лямбда передается событию.Как ты это делаешь?

спасибо

1 Ответ

5 голосов
/ 27 мая 2011

Просто создайте копию переменной:

int currentI = i;
button.Click+=new EventHandler ((object sender, EventArgs args) => 
    { button_click (currentI, sender, args); });

Обратите внимание, что у вас есть определенное количество взяток.Вы можете написать это более просто как:

int currentI = i;
button.Click += (sender, args) => button_click(currentI, sender, args);

Лично я бы переименовал метод button_click в соответствии с соглашениями об именах .NET.

...