none
Aus der MSDN Hotline: Eager and Lazy Evaluation in einer if/else - Bedingung RRS feed

  • Allgemeine Diskussion

  • 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 
    MSDN Hotline: Schnelle & kompetente Hilfe für Entwickler: kostenfrei!

    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.

    Freitag, 5. November 2010 13:22

Alle Antworten