¿Por qué es fácil; piensa en lo que has escrito como estar realmente presente:
object o = null;
Console.WriteLine(("Is null: " + o) == null); // returns false
Es la prueba "Is null: " + o
contra null
, que siempre será false
. Esto se debe a las reglas de precedencia del operador, donde +
viene antes de ==
.
Usted debe solicitar explícitamente parens para asegurarse de que está funcionando como usted quiere:
Console.WriteLine("Is null: " + (o == null)); // returns true
Como se señaló en los comentarios por Jim Rhodes:
Ésta es una de las varias razones por las que debe utilizar siempre entre paréntesis y nunca confíe en las reglas de precedencia del compilador.
Me di cuenta de que estoy de acuerdo; que ni siquiera intento para recordar las reglas de precedencia del operador yo mismo, en lugar de ser explícito con parens todo el tiempo. Sugiero además que esta es también una de las razones para tener mucho cuidado al confiar en la conversión de tipo implícito y/o métodos con múltiples sobrecargas.
También me gustaría señalar que realmente me gusta algo Ravadre observado en their answer; sobre por qué solo se imprimió "False", y no todo el texto que intentaba imprimir.
Esta es una de varias razones por las que SIEMPRE debe usar paréntesis y nunca confiar en las reglas de precedencia del compilador. –
@JimRhodes De hecho; Ni siquiera trato de recordar las reglas de precedencia del operador yo mismo. Si podría * posiblemente * ser un problema, explícitamente indicaré la prioridad en mi código. Este ejemplo es * también * un caso que muestra que confiar en una conversión de tipo explícita puede causar confusión. –