Heim >Backend-Entwicklung >C++ >C#-Nullprüfungen: Wann sollte „x ist null' vs. „x == null' verwendet werden?
Nullreferenzvergleiche in C#: „x ist null“ vs. „x == null“
In C# 7 wurde die Einführung von Der Mustervergleichsoperator hat Fragen zu seiner Verwendung im Vergleich zum herkömmlichen Ausdruck == null aufgeworfen. Während diese Ausdrücke beim Umgang mit Null austauschbar erscheinen mögen, gibt es beim Vergleich von Referenztypen wichtige Unterschiede zu berücksichtigen.
Überlegungen zum Typ
Im Gegensatz zu == null, das Objekte vergleicht Referenzen auf Gleichheit, x ist null, prüft auf den Typ von x. Wenn x ein Referenztyp ist, gibt x is null nur dann true zurück, wenn x null ist. Im Gegensatz dazu gibt x == null sowohl für Null- als auch für Referenztypen mit anderen Werten als Null „true“ zurück.
class Foo {} Foo foo = null; Console.WriteLine(foo is null); // True Console.WriteLine(foo == null); // True
Auswirkungen auf die Leistung
Intern handelt es sich bei x um Nullaufrufe System.Object.Equals(object, object), während x == null ceq aufruft (eine Vergleichsmethode für Referenztypen). Bei Nullverweisen haben beide Ausdrücke die gleiche Leistung, da sie beide „true“ zurückgeben. Bei Nicht-Null-Referenzen kann x is null aufgrund der zusätzlichen Typprüfung jedoch erheblich langsamer sein.
Überladene Gleichheitsoperatoren
Wenn ein Gleichheitsoperator (z. B == oder Equals) für einen bestimmten Typ überladen ist, prüft x is null nicht mehr auf Typgleichheit und delegiert stattdessen an den überladenen Operator. Andererseits prüft x == null immer auf Referenzgleichheit.
class Foo { public static bool operator ==(Foo left, Foo right) => ... public static bool operator !=(Foo left, Foo right) => ... } Foo foo1 = new Foo(); Foo foo2 = null; Console.WriteLine(foo1 is null); // False (checks type only) Console.WriteLine(foo1 == null); // False (delegates to overloaded operator) Console.WriteLine(foo2 is null); // True (checks type only) Console.WriteLine(foo2 == null); // True (reference comparison)
Wann man eins über dem anderen verwenden sollte
Im Allgemeinen:
Letztendlich ist die Wahl zwischen x null und x = = null hängt von den spezifischen Anforderungen Ihres Codes ab.
Das obige ist der detaillierte Inhalt vonC#-Nullprüfungen: Wann sollte „x ist null' vs. „x == null' verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!