Penso che queste due espressioni sono esattamente equivalenti da un punto di vista semantica del linguaggio. Entrambe le modalità comportano il cortocircuito.
Sono un po 'sbalordito che la risposta di Andrew ha già dieci upvotes; sembra un'assurdità per me, ma forse mi manca davvero qualcosa di sottile qui.
EDIT
Quindi, solo per riassumere:
domanda del PO chiede "perché questo accada di ottimizzazione".
Infatti non si verifica alcuna "ottimizzazione". I due codici sorgente C# sono logicamente equivalenti. ".Net Reflector" o qualsiasi altro strumento di disassemblaggio è probabilmente in grado di decompilare lo stesso IL in uno o nell'altro. A livello di IL, ci sono solo un sacco di salti condizionali, e quindi non c'è necessariamente un modo per sapere "quale strada è se e che altro" o altre equivalenze simili di DeMorgan.
Affascinanti, le persone sono estremamente felici di votare su o giù per le risposte a questa domanda, anche quando (o forse perché) la domanda originale non ha molto senso (o si basa su un'ipotesi errata).
Fortunatamente, alla fine prevale la saggezza della folla (e di individui intelligenti come @Mehrdad). Evviva per StackOverflow!
(Sto facendo la mia risposta una wiki, perché non voglio un rappresentante per "storytelling su una domanda" quando il rappresentante dovrebbe essere assegnato a "buone risposte a una domanda" .Penso che la storia di questa domanda sia interessante.)
Come l'hai scoperto? –
E cosa succede con un getter che induce effetti collaterali? :) –
@ pst: gli effetti collaterali sui getter possono essere ignorati dal compilatore. Fondamentalmente, il compilatore non può assumere effetti collaterali su getter e setter. –