Warum diese Erklärung + Zuordnung einen Fehler verursachen:Verwendung von nicht zugewiesenen lokalen Variablen, wenn eine anonyme Funktion auf sich selbst schließt die Schaffung
// Use of unassigned local variable 'handler'.
SessionEndingEventHandler handler = (sender, e) => { isShuttingDown = true; SystemEvents.SessionEnding -= handler; };
während dies nicht:
SessionEndingEventHandler handler = null;
handler = (sender, e) => { isShuttingDown = true; SystemEvents.SessionEnding -= handler; };
In ist intuitiv, dass die erste Anweisung sollte einen Fehler verursachen, aber nicht sofort klar, warum die zweite nicht ist.
Außerdem, wie könnte ich sagen, ob das SystemEvents.SessionEnding
Ereignis wurde tatsächlich nach dem Aufruf an handler(null, null)
abgemeldet? Die GetInvocationList
funktioniert nur mit Delegaten.
SystemEvents.SessionEnding += handler;
handler(null, null);
Die erste Anweisung entspricht mehr dem 'SessionEndingEventHandler-Handler;', während sie in der zweiten Anweisung null zugewiesen wird. Es ist nicht zugewiesen, bis das Lambda vollständig aufgebaut ist. Siehe http://stackoverflow.com/questions/1362204/how-to-remove-a-lambda-event-handler –