Estou começando a aprender tipos anuláveis e tive o seguinte comportamento.
Ao tentar int nulo, vejo operador de comparação me dá resultado inesperado. Por exemplo, no meu código abaixo, a saída que recebo é "ambos e 1 são iguais" . Observe que ele também não 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);
Eu esperava que qualquer número inteiro não negativo fosse maior que nulo. Estou perdendo alguma coisa aqui?
Respostas:
De acordo com o MSDN - está abaixo da página na seção "Operadores":
Então, tanto
a > b
ea < b
avaliar comofalse
desdea
é nulo ...fonte
nothing <> 1
=null
em VB enquantonull != 1
=true
em C # - Eu tenho usado LinqPad para testar as declaraçõesLifted Operators
em C # stackoverflow.com/questions/3370110/what-are-lifted-operators - imaginei se esse seria o motivo pelo qual o VB.NET retornaria resultados diferentesComo o MSDN diz
fonte
Para resumir: qualquer comparação de desigualdade com nula (
>=
,<
,<=
,>
) retornafalse
mesmo se ambos os operandos são nulos. ieQualquer comparação de igualdade ou não-igualdade com null (
==
,!=
) funciona 'conforme o esperado'. iefonte
int? nonNull
eint notNull
?Nullable<NumberTypes> = null
. Verificado.Comparando C # com SQL
C #: a = nulo eb = nulo => a == b => verdadeiro
SQL: a = nulo eb = nulo => a == b => false
fonte