Estoy empezando a aprender tipos anulables y me encontré con el siguiente comportamiento.
Al intentar int nullable, veo que el operador de comparación me da un resultado inesperado. Por ejemplo, en mi código a continuación, el resultado que obtengo es "ambos y 1 son iguales" . Tenga en cuenta que tampoco imprime "nulo".
int? a = null;
int? b = 1;
if (a < b)
Console.WriteLine("{0} is bigger than {1}", b, a);
else if (a > b)
Console.WriteLine("{0} is bigger than {1}", a, b);
else
Console.WriteLine("both {0} and {1} are equal", a, b);
Esperaba que cualquier número entero no negativo fuera mayor que nulo, ¿me estoy perdiendo algo aquí?
Respuestas:
Según MSDN , está en la página de la sección "Operadores":
Entonces ambos
a > b
ya < b
evaluarfalse
comoa
es nulo ...fuente
nothing <> 1
=null
en VB mientras quenull != 1
=true
en C # --He estado usando LinqPad para probar las declaracionesLifted Operators
en C # stackoverflow.com/questions/3370110/what-are-lifted-operators - Me preguntaba si esta podría ser la razón por la que VB.NET devuelve resultados diferentesComo dice MSDN
fuente
Para resumir: cualquier comparación con la desigualdad nulo (
>=
,<
,<=
,>
) devuelvefalse
incluso si ambos operandos son nulos. es decirCualquier comparación de igualdad o no igualdad con nulo (
==
,!=
) funciona 'como se esperaba'. es decirfuente
int? nonNull
yint notNull
?Nullable<NumberTypes> = null
. VerificadoComparar C # con SQL
C #: a = nulo y b = nulo => a == b => verdadero
SQL: a = nulo y b = nulo => a == b => falso
fuente