Heim > Backend-Entwicklung > C++ > C#-Nullprüfungen: Wann sollte „x ist null' vs. „x == null' verwendet werden?

C#-Nullprüfungen: Wann sollte „x ist null' vs. „x == null' verwendet werden?

Barbara Streisand
Freigeben: 2024-12-30 12:55:09
Original
843 Leute haben es durchsucht

C# Null Checks: When to Use `x is null` vs. `x == null`?

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
Nach dem Login kopieren

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)
Nach dem Login kopieren

Wann man eins über dem anderen verwenden sollte

Im Allgemeinen:

  • Verwenden Sie x == null, wenn Sie Bedenken hinsichtlich der Leistung haben oder wenn der Gleichheitsoperator dies tut überladen.
  • Verwenden Sie x ist null, wenn Sie auf Typgleichheit prüfen müssen (z. B. innerhalb eines Mustervergleichsausdrucks).

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage