111*_*111 3 c# lambda closures scope event-handling
嗨,我正在尝试为事件处理程序编写lambda.所以我可以为被调用的方法提供更多信息.
所以我在做:
button.Click+=new EventHandler ((object sender, EventArgs args) =>
{ button_click (i, sender, args); });
Run Code Online (Sandbox Code Playgroud)
哪里:
public void button_click (int i, object sender, EventArgs eventArgs)
Run Code Online (Sandbox Code Playgroud)
好的,所以这个方法在调用方法中起作用,但i始终是最后已知的值i,我真的想要将lambda传递给事件的那个值.你是怎样做的?
谢谢
只需创建变量的副本:
int currentI = i;
button.Click+=new EventHandler ((object sender, EventArgs args) =>
{ button_click (currentI, sender, args); });
Run Code Online (Sandbox Code Playgroud)
请注意,那里有一定数量的残余物.你可以更简单地写它:
int currentI = i;
button.Click += (sender, args) => button_click(currentI, sender, args);
Run Code Online (Sandbox Code Playgroud)
我个人会重命名该button_click方法以符合.NET命名约定.