Bap*_*net 3 c# events event-handling
我想只调用一次事件处理程序,然后将其分离.我试着写:
EventHandler handler = (s, e) =>
{
// Do something
//
// blabla
// Detach the handler
SizeChanged -= handler;
};
SizeChanged += handler;
Run Code Online (Sandbox Code Playgroud)
但是在线上SizeChanged -= handler
我得到了这个错误
Use of unassigned local variable 'handler'
Run Code Online (Sandbox Code Playgroud)
你有关于我应该如何进行的想法吗?我想过使用布尔标志,但只有当我找不到分离处理程序的方法时才会这样做.
在将结果赋给变量之前,C#编译器将首先创建您编写的lambda表达式.因此,当定义lambda时,handler没有值.
但是,如果您之前为EventHandler分配了null值,则它可以正常工作.
因为它是一个闭包,并且在闭包中捕获局部变量,所以在调用处理程序时将具有正确的值并且它将起作用:
EventHandler handler=null;
handler = (s, e) =>
{
// Do something
SizeChanged -= handler;
};
SizeChanged += handler;
Run Code Online (Sandbox Code Playgroud)
对所有人进行downvoting:它不会导致NullReferenceException.handler是一个在闭包中捕获的局部变量,因此当lambda中包含闭包的方法发生变化时,lambda中的handler值将会改变.我在我的电脑上实际测试过它,效果很好.
归档时间: |
|
查看次数: |
146 次 |
最近记录: |