Hubo un gran debate sobre esta rareza cuando la función se diseñó originalmente en C # 2.0. El problema es que los usuarios de C # están completamente acostumbrados a que esto sea significativo:
if(someReference == null)
Al extender la igualdad a tipos de valor que aceptan valores NULL, tiene las siguientes opciones.
La igualdad anulable se levanta realmente . Si uno o ambos operandos es nulo, el resultado no es ni verdadero ni falso, sino nulo. En este caso, puede:
a) Haga que sea ilegal tener una igualdad de tipo de valor anulable en una if
declaración, porque la if
declaración necesita un bool, no un bool anulable. En su lugar, solicite que todos usen HasValue
si quieren comparar con nulo. Esto es prolijo e irritante.
b) Convierta automáticamente nulo en falso. La desventaja de esto es que x==null
devuelve falso si x es nulo, lo cual es confuso y va en contra de la comprensión de las personas sobre las comparaciones nulas con tipos de referencia.
La igualdad anulable no se levanta. La igualdad que acepta valores NULL es verdadera o falsa, y la comparación con nulo es una comprobación nula. Esto hace que la igualdad anulable sea incompatible con la desigualdad anulable.
Ninguna de estas opciones es obviamente correcta; todos tienen pros y contras. VBScript elige 1b, por ejemplo. Después de mucho debate, el equipo de diseño de C # eligió el n. ° 2.