¿Cuál es la razón por la cual null
no se evalúa como false
en condicionales?¿Por qué no se evalúa nulo en falso?
Primero pensé en las asignaciones para evitar el error de usar =
en lugar de ==
, pero esto podría ser fácilmente rechazado por el compilador.
if (someClass = someValue) // cannot convert someClass to bool. Ok, nice
if (someClass) // Cannot convert someClass to bool. Why?
if (someClass != null) // More readable?
creo que es bastante razonable suponer que null
significa false
. Hay otros idiomas que usan esto también, y no he tenido un error debido a eso.
Edit: Y, por supuesto, me refiero a los tipos de referencia.
Un buen comentario de Daniel Earwicker en el error de asignación ... Esto compila sin una advertencia, ya que se evalúa como bool
:
bool bool1 = false, bool2 = true;
if (bool1 = bool2)
{
// oops... false == true, and bool1 became true...
}
La respuesta simple es: "Así es como lo querían los diseñadores de C#". Sin embargo, eso realmente no responde la pregunta. ¿Alguien tiene idea de por qué a los diseñadores de idiomas no les gustó lanzar automáticamente referencias a booleanos (como C/C++/Python)? – Karmastan
Estoy tratando de rastrear una referencia, creo que lo obtuve al hablar con un miembro del equipo de idioma hace un tiempo, lo que realmente no ayuda –
Creo que solo los programadores de C considerarían razonable que null significa falso. False es un valor, null es la falta de un valor. C# lo hace bien, creo. Otros lenguajes que se construyeron sin un tipo booleano o un concepto de puntero (o tipo anulable) simplemente sobrecargaron un int para significar todas estas cosas diferentes. ¿Por qué NULL == es falso y falso == 0? No deberían. – Dolphin