使用lambda for winforms事件有什么问题吗?

这是一个非常简单的问题。 我问,因为我之前从未见过它,这让我想知道是不是有什么问题。

comboBox1.MouseEnter += (a, b) => comboBox1.Focus(); campaignDataGridView.MouseEnter += (a, b) => campaignDataGridView.Focus(); 

但是,这是完全可以接受的,因为这些是匿名委托,所以无法取消订阅事件处理程序。

那是:

 // Subscribe lambda as event handler comboBox1.MouseEnter += (a, b) => comboBox1.Focus(); // Try to unsubscribe a _different_ lambda with identical syntax. // The first lambda is still subscribed comboBox1.MouseEnter -= (a, b) => comboBox1.Focus(); 

这是否有问题取决于您的应用和使用。

没事; 唯一微妙的一点是,如果你需要取消订阅; 那么你也需要在本地存储代理:

 EventHandler handler = (s,a) => ... obj.SomeEvent += handler; ... obj.SomeEvent -= handler; 

请注意,如果我没有使用任何参数(sender / args),我更喜欢anon方法语法:

 obj.SomeEvent += delegate {...}; 

因为这不会在范围中引入任何额外的(不必要的)变量。