with operator convert comprobar c# nullable

c# - operator - ¿Cómo funciona el operador de comparación con null int?



nullable class c# (3)

Como dice MSDN

Cuando realiza comparaciones con tipos anulables, si el valor de uno de los tipos anulables es nulo y el otro no, todas las comparaciones se evalúan como falsas, excepto para! = (No igual). Es importante no asumir que debido a que una comparación particular devuelve falso, el caso opuesto devuelve verdadero. En el siguiente ejemplo, 10 no es mayor que, menor que, ni igual a nulo. Solo num1! = Num2 se evalúa como verdadero.

int? num1 = 10; int? num2 = null; if (num1 >= num2) { Console.WriteLine("num1 is greater than or equal to num2"); } else { // This clause is selected, but num1 is not less than num2. Console.WriteLine("num1 >= num2 returned false (but num1 < num2 also is false)"); } if (num1 < num2) { Console.WriteLine("num1 is less than num2"); } else { // The else clause is selected again, but num1 is not greater than // or equal to num2. Console.WriteLine("num1 < num2 returned false (but num1 >= num2 also is false)"); } if (num1 != num2) { // This comparison is true, num1 and num2 are not equal. Console.WriteLine("Finally, num1 != num2 returns true!"); } // Change the value of num1, so that both num1 and num2 are null. num1 = null; if (num1 == num2) { // The equality comparison returns true when both operands are null. Console.WriteLine("num1 == num2 returns true when the value of each is null"); } /* Output: * num1 >= num2 returned false (but num1 < num2 also is false) * num1 < num2 returned false (but num1 >= num2 also is false) * Finally, num1 != num2 returns true! * num1 == num2 returns true when the value of each is null */

Estoy empezando a aprender tipos que aceptan nulos y me encontré con el siguiente comportamiento.

Al intentar nullable int, veo que el operador de comparación me da un resultado inesperado. Por ejemplo, en mi código a continuación, la salida que recibo es "ambos y 1 son iguales" . Tenga en cuenta que no imprime "nulo" también.

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 entero no negativo fuera mayor que nulo. ¿Me falta algo aquí?


En resumen: cualquier comparación de desigualdad con null ( >= , < , <= , > ) devuelve false incluso si ambos operandos son nulos. es decir

null > anyValue //false null <= null //false

Cualquier comparación de igualdad o no igualdad con null ( == != ) Funciona ''como se esperaba''. es decir

null == null //true null != null //false null == nonNull //false null != nonNull //true


Según MSDN , está abajo en la sección "Operadores":

Cuando realiza comparaciones con tipos anulables, si el valor de uno de los tipos que aceptan null es null y el otro no, todas las comparaciones se evalúan como false excepto para !=

Entonces, tanto a > b como a < b evalúan a false ya que a es nulo ...