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

时间:2010-12-05 15:55:56

标签: c# lambda

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

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

2 个答案:

答案 0 :(得分:9)

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

那是:

// 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(); 

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

答案 1 :(得分:5)

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

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

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

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

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