Aus dem Kurs: C# – Tipps und Tricks
Richtig auf null prüfen
Aus dem Kurs: C# – Tipps und Tricks
Richtig auf null prüfen
Wie kann man oder wie sollte man auf null prüfen? Hier gibt es verschiedene Möglichkeiten, aber macht es auch einen Unterschied? Werfen wir doch mal einen Blick darauf. In dem kleinen Demo, das ich vorbereitet habe, erzeuge ich zunächst eine Instanz einer Klasse, ClassA, und prüfe dann erst mit dem == Operator, ob die Instanz null ist, und verwende im Anschluss die zweite Alternative, das is null. Und das Ergebnis sollte so sein, dass beide Ergebnisse mir sagen, dass meine Instanz nicht null ist, was logisch ist, weil ich hier oben ja erst eine Instanz erzeugt habe. Der Unterschied ist aber, dass der is null Operator wirklich prüft, ob die Referenz null ist. Da kann ich als Programmierer auch keinen Einfluss drauf nehmen, und das wäre das Stichwort für den == Operator, den ich nämlich sehr wohl überschreiben kann, wenn ich möchte. Das heißt, ich kann hier programmieren, wie der Vergleich zweier Instanzen aussehen soll, und wann das Ergebnis true oder false ist. Das bedeutet, aus Performance-Sicht macht es sehr wohl einen Unterschied, was ich benutze. Der == Operator kann um einiges langsamer sein als der is null Operator, weil hier durchaus eine Menge Code stehen könnte, der vielleicht geschrieben wurde, ohne wirklich auf Performance zu achten. Und ich habe das Problem, dass hier möglicherweise widersinniger Code, wie z.B. dieses Beispiel, oder schlicht fehlerhafter Code zu finden ist, so dass, das Ergebnis definitiv nicht das Erwartete ist. Wenn ich nämlich das hier laufen lasse, dann wird zunächst einmal die Instanz erzeugt, und die ist auch in der Tat da, da gibt's nichts zu drehen und nichts zu wenden. Und die Prüfung sagt mir aber, dass die Instanz null sei, während is null natürlich korrekt funktioniert, da kann ich nichts machen. Und letztendlich eine Gefahr für mich. Wenn ich beispielsweise den Code der Klasse nicht direkt einsehen kann, ich genau weiß, wie was definiert ist, dann kann es sein, dass da möglicherweise der == Operator überschrieben wurde, und ich bekomme hier seltsame Ergebnisse. Das heißt, der eigentlich richtige Ansatz, um auf null zu prüfen, ist der is null Operator.
Inhalt
-
-
-
Richtig auf null prüfen2 Min. 20 Sek.
-
(Gesperrt)
Null-Conditional-Operator nutzen2 Min. 53 Sek.
-
(Gesperrt)
Null-Coalescing-Operator verwenden2 Min. 26 Sek.
-
(Gesperrt)
Ausnahme werfen, wenn ein Wert null ist2 Min. 3 Sek.
-
(Gesperrt)
Null-Forgiving-Operator einsetzen3 Min. 53 Sek.
-
(Gesperrt)
NameOf-Operator anwenden2 Min. 14 Sek.
-
(Gesperrt)
Mit der String-Interpolation arbeiten2 Min. 17 Sek.
-
(Gesperrt)
Objekte initialisieren2 Min. 28 Sek.
-
(Gesperrt)
Using-Block und IDisposable verstehen2 Min. 50 Sek.
-
(Gesperrt)
Ressourcen mit using-Declarations freigeben2 Min. 53 Sek.
-
Tupel in der Praxis nutzen3 Min. 12 Sek.
-
(Gesperrt)
Switch-Anweisung mit Typen erstellen2 Min. 9 Sek.
-
(Gesperrt)
Preprocessor-Direktiven einsetzen3 Min. 42 Sek.
-
(Gesperrt)
Zeichenketten richtig vergleichen2 Min. 30 Sek.
-
(Gesperrt)
Richtig auf leere Zeichenkette prüfen2 Min. 1 Sek.
-
(Gesperrt)
Mehrfachzuweisungen vornehmen1 Min. 17 Sek.
-
(Gesperrt)
Zwischenergebnisse mit dem yield-Operator liefern2 Min. 6 Sek.
-
(Gesperrt)
Erweiterungsmethoden (Extension Methods) nutzen2 Min. 45 Sek.
-
(Gesperrt)
Indexzugriffe auf Arrays durchführen2 Min. 21 Sek.
-
(Gesperrt)
Getter und Setter mit unterschiedlichem Zugriffslevel2 Min. 49 Sek.
-
Felder als readonly markieren1 Min. 44 Sek.
-
(Gesperrt)
Prüfen, ob eine Zeichenkette eine Zahl enthält3 Min. 13 Sek.
-
(Gesperrt)
CultureInfo praktisch einsetzen2 Min. 39 Sek.
-
(Gesperrt)
Console nutzen2 Min. 9 Sek.
-
(Gesperrt)
Verzeichnis komprimieren1 Min. 45 Sek.
-