【发布时间】:2015-10-11 01:20:00
【问题描述】:
为什么这个声明+赋值会报错:
// Use of unassigned local variable 'handler'.
SessionEndingEventHandler handler = (sender, e) => { isShuttingDown = true; SystemEvents.SessionEnding -= handler; };
虽然没有:
SessionEndingEventHandler handler = null;
handler = (sender, e) => { isShuttingDown = true; SystemEvents.SessionEnding -= handler; };
很直观,第一个语句应该会导致错误,但不能立即清楚为什么第二个语句不会。
此外,在调用handler(null, null) 之后,我如何判断SystemEvents.SessionEnding 事件是否实际上已取消订阅? GetInvocationList 仅适用于代表。
SystemEvents.SessionEnding += handler;
handler(null, null);
【问题讨论】:
-
第一个语句更等同于
SessionEndingEventHandler handler;,而在第二个语句中你将它赋值为null。在完全构造 lambda 之前,它是未分配的。见stackoverflow.com/questions/1362204/…
标签: c# .net variables delegates unassigned-variable