RCI*_*CIX 28 .net c# casting event-handling
我正在连接一个事件以使用一个lambda,它需要在触发后自行移除.我无法通过将lambda内联到+ =事件(没有用于删除事件的可访问变量)来做到这一点,所以我设置了一个Action<object, EventArgs>变量并将lambda移动到那里.主要错误是它无法将其转换Action<object, EventArgs>为EventHandler.我认为lambda表达式可以隐式转换为事件处理程序,为什么这不起作用?
Qry*_*taL 41
Action<Object, EventArgs> a = (o, ea) => { };
EventHandler e = a.Invoke;
Run Code Online (Sandbox Code Playgroud)
Bri*_*ian 38
Lambdas可以隐式转换为具有正确形状的委托类型,但是两个相同形状的委托类型不能隐式地相互转换.只需使局部变量具有类型EventHandler.
EventHandler h = (o, ea) => { ... };
e += h;
...
e -= h;
Run Code Online (Sandbox Code Playgroud)
(如果它有帮助:
Action<object, EventArgs> a = (o, ea) => { };
EventHandler e = a; // not allowed
EventHandler e2 = (o,ea) => a(o,ea); // ok
Run Code Online (Sandbox Code Playgroud)
)
| 归档时间: |
|
| 查看次数: |
9802 次 |
| 最近记录: |