Ich fange an, nullbare Typen zu lernen und bin auf folgendes Verhalten gestoßen.
Beim Versuch, nullable int zu verwenden, sehe ich, dass der Vergleichsoperator ein unerwartetes Ergebnis liefert. In meinem Code unten lautet die Ausgabe beispielsweise "beide und 1 sind gleich" . Beachten Sie, dass auch nicht "null" ausgegeben wird.
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);
Ich hatte gehofft, dass eine nicht negative ganze Zahl größer als null ist. Vermisse ich hier etwas?
Antworten:
Laut MSDN ist es unten auf der Seite im Abschnitt "Operatoren":
Also beides
a > b
unda < b
auswerten,false
daa
ist null ...quelle
nothing <> 1
=null
in VB, währendnull != 1
=true
in C # - ich LinqPad verwendet habe, um die Anweisungen zu testenLifted Operators
in C # stackoverflow.com/questions/3370110/what-are-lifted-operators - Ich habe mich gefragt, ob dies der Grund sein könnte, warum VB.NET andere Ergebnisse zurückgibtWie MSDN sagt
quelle
Fassen wir zusammen: jede Ungleichheit Vergleich mit null (
>=
,<
,<=
,>
) liefert ,false
selbst wenn beide Operanden null sind. dhJeder Vergleich von Gleichheit oder Nichtgleichheit mit null (
==
,!=
) funktioniert 'wie erwartet'. dhquelle
int? nonNull
undint notNull
?Nullable<NumberTypes> = null
. Verifiziert.C # mit SQL vergleichen
C #: a = null und b = null => a == b => true
SQL: a = null und b = null => a == b => false
quelle