Hallo zusammen,
heute wurde uns bei der MSDN Hotline unter anderem folgende Frage gestellt:
Kann man den folgenden Code nicht irgendwie schöner formulieren?
if (obj != null){
if (obj.Module != null){
obj.Module.Execute();
}
}
Zum Beispiel so:
if (obj != null && obj.Module != null){
obj.Module.Execute();
}
Dieser Code wird aber ein NullReferenceException werfen bei der Auswertung von dem zweiten Teil (obj.Module != null), wenn obj == null ist.
Geht das irgendwie anders?
Unsere Antwort bzw. unser Lösungsvorschlag darauf war:
Der zweite Code wird eigentlich kein Exception werfen. Die C# Operatoren
&& und || arbeiten nach dem Prinzip vom
Lazy Evaluation [1]. Das heißt, ein Ausdruck wird erst dann ausgewertet, wenn seinen Wert unbedingt notwendig ist. In dem Beispiel (obj != null && obj.Module != null) ist die Auswertung von (obj.Module != null)-Teil nur dann
notwendig, wenn (obj != null) true zurückliefert. Wenn (obj != null) false zurückliefert, dann ist der gesammten Ausdruck falsch, egal was der Wert von dem zweiten Teil ist. Dann wird diesen auch nicht ausgewertet.
Die Operatoren & und | arbeiten nach dem Prinzip von
Eager Evaluation [2]. Diese Operatoren werden den zweiten Teil auswerten, unabhängig davon, was der Wert von dem ersten Teil des Ausdrucks ist. Wenn man in dem Beispiel oben den &-Operator anstatt von && verwendet, wird ein
Exception geworfen.
Mehr Informationen über lazy und eager Evaluation findet man auf den folgenden Webseiten:
1. Wikipedia: Lazy Evaluation
2. Wikipedia: Eager Evaluation
Viele Grüße,
Atanas Dimitrov
MSDN Hotline für MSDN Online Deutschland
Disclaimer:
Bitte haben Sie Verständnis dafür, dass wir hier auf Rückfragen gar nicht oder nur sehr zeitverzögert antworten können.
Bitte nutzen Sie für Rückfragen oder neue Fragen den telefonischen Weg über die MSDN Hotline:
http://www.msdn-online.de/Hotline

Es gelten für die MSDN Hotline und dieses Posting diese
Nutzungsbedingungen, Hinweise zu
Markenzeichen sowie die allgemein gültigen
Informationen zur Datensicherheit sowie die gesonderten
Nutzungsbedingungen für die MSDN Hotline.