Lambda表达式和事件处理程序?

8

有人向我提到,c#支持使用lambda表达式作为事件处理程序,有人可以给我提供一些参考资料吗?

最好附上代码片段。

2个回答

13

您可以使用lambda表达式来构建匿名方法,并将其附加到事件上。

例如,如果您制作了一个带有ButtonLabel的Windows窗体,您可以在构造函数中(在InitializeComponent()之后)添加以下代码:

 this.button1.Click += (o,e) =>
     {
        this.label1.Text = "You clicked the button!";
     };

每次单击按钮时,标签都会发生更改。


是的。我也想指出关于添加和删除匿名事件处理程序的问题:https://dev59.com/GnI-5IYBdhLWcg3wBjhR - devshorts
@devshorts 是的。如果你还需要取消订阅,这可能并不是一个好的选择。 - Reed Copsey
单语句方法体的大括号不是多余的吗? - Superbest
@Superbest 对于单语句体来说,它们并不是必需的 - 它们不会有任何影响,但在像这样的帖子中阅读时,它可以使阅读更加清晰,这就是为什么我以这种方式编写它的原因。 - Reed Copsey

0

尝试这个例子

public Form1()
{
    InitializeComponent();
    this.button1.Click += new EventHandler(button1_Click);
}

void button1_Click(object sender, EventArgs e)
{
}

上述事件处理程序可以使用此lambda表达式重写

public Form1()
{
    InitializeComponent();
    this.button1.Click += (object sender, EventArgs e) = >
    {
        MessageBox.Show(“Button clicked!”);
    };
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接