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