Je commence à apprendre les types Nullable et j'ai rencontré le comportement suivant.
En essayant de nullable int, je vois que l'opérateur de comparaison me donne un résultat inattendu. Par exemple, dans mon code ci-dessous, la sortie que j'obtiens est "les deux et 1 sont égaux" . Notez qu'il n'imprime pas non plus "null".
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);
J'espérais que tout entier non négatif serait supérieur à null, est-ce que je manque quelque chose ici?
Réponses:
Selon MSDN - c'est en bas de la page dans la section "Opérateurs":
Donc, les deux
a > b
eta < b
évaluerfalse
depuisa
est nul ...la source
nothing <> 1
=null
en VB alors quenull != 1
=true
en C # - J'utilise LinqPad pour tester les déclarationsLifted Operators
dans C # stackoverflow.com/questions/3370110/what-are-lifted-operators - je me suis demandé si cela pourrait être la raison pour laquelle VB.NET renvoie des résultats différentsComme le dit MSDN
la source
Pour résumer: toute comparaison avec l'inégalité nulle (
>=
,<
,<=
,>
) retournefalse
même si les deux opérandes sont nuls. c'est à direToute comparaison d'égalité ou de non-égalité avec null (
==
,!=
) fonctionne «comme prévu». c'est à direla source
int? nonNull
etint notNull
?Nullable<NumberTypes> = null
. Vérifié.Comparaison de C # avec SQL
C #: a = null et b = null => a == b => vrai
SQL: a = null et b = null => a == b => faux
la source