Creo que estas dos expresiones son exactamente equivalentes desde el punto de vista de la semántica del lenguaje. Ambas formas implican un cortocircuito.
Estoy algo estupefacto porque la respuesta de Andrew ya tiene diez votos ascendentes; a mí me parece una tontería, pero tal vez realmente me estoy perdiendo algo sutil aquí.
EDITAR
Así que para resumir:
La pregunta del OP se pregunta "¿por qué sucede esto optimización".
De hecho, no hay 'optimización'. Los dos códigos fuente de C# son lógicamente equivalentes. ".Net Reflector" o cualquier otra herramienta de desmontaje es probable que descompile el mismo IL en uno u otro. En el nivel IL, solo hay un montón de saltos condicionales, por lo que no hay necesariamente una forma de saber "de qué manera es si y qué es lo demás" u otras equivalencias de DeMorgan similares.
Fascinantemente, la gente está muy contenta de votar con respuestas positivas o negativas a esta pregunta, incluso cuando (o tal vez porque) la pregunta original no tiene mucho sentido (o se basa en una suposición errónea).
Afortunadamente, con el tiempo prevalece la sabiduría de las multitudes (y las personas inteligentes como @Mehrdad). ¡Hurra por StackOverflow!
(Estoy convirtiendo mi respuesta en una wiki, porque no quiero representante para "contar historias sobre una pregunta" cuando se debe otorgar rep a "buenas respuestas a una pregunta". Pero creo que la historia de esta pregunta es interesante.)
¿Cómo se enteró? –
¿Y qué ocurre con un absorbente inductor de efectos secundarios? :) –
@pst: los efectos secundarios en getters pueden ser ignorados por el compilador. Básicamente, el compilador no puede asumir efectos secundarios en getters y setters. –