C#lambda表达式,作用域变量值

时间:2011-05-27 11:28:06

标签: c# lambda scope closures event-handling

嗨我正在尝试为事件处理程序编写lambda。所以我可以为被调用的方法提供更多信息。

所以我在做:

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的最后一个已知值,我真的想要将lambda传递给事件的那个值。你是怎么做到的?

感谢

1 个答案:

答案 0 :(得分:5)

只需创建变量的副本:

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命名约定。