5
爲什麼這個聲明+賦值導致錯誤:創建一個匿名函數關閉自身時,使用未分配的局部變量
// 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; };
在直觀的是,第一個陳述應該導致一個錯誤,但不能立即清楚爲什麼第二個陳述不是。
此外,我怎麼能告訴SystemEvents.SessionEnding
事件實際上在handler(null, null)
的調用後已取消訂閱? GetInvocationList
只適用於代表。
SystemEvents.SessionEnding += handler;
handler(null, null);
第一個語句更相當於'SessionEndingEventHandler處理程序;',而在第二個語句中,您將它分配給null。它的未分配,直到lambda完全構建。請參閱http://stackoverflow.com/questions/1362204/how-to-remove-a-lambda-event-handler –