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

Aar*_*ide 3 c# lambda

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

comboBox1.MouseEnter += (a, b) => comboBox1.Focus();
campaignDataGridView.MouseEnter += (a, b) => campaignDataGridView.Focus();
Run Code Online (Sandbox Code Playgroud)

Ode*_*ded 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(); 
Run Code Online (Sandbox Code Playgroud)

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


Mar*_*ell 5

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

EventHandler handler = (s,a) => ...
obj.SomeEvent += handler;
...
obj.SomeEvent -= handler;
Run Code Online (Sandbox Code Playgroud)

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

obj.SomeEvent += delegate {...};
Run Code Online (Sandbox Code Playgroud)

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