Bist du nicht auch müde der ganzen NullReferenceExceptions? Die gute Nachricht ist, dass es Microsoft endlich geschafft hat uns zu unterstützen.

Aber der Reihe nach. Was passiert da eigentlich?

Wir versuchen einen Member eines Objektes aufzurufen, wo das entsprechende Objekt null ist. Also das meint, dass kein Objekt im Speicher existiert, auf das wir zugreifen können.

Code:

Der oben aufgeführte Code kompiliert ohne Fehlermeldung. Zur Laufzeit gibt es dann eine NullReferenceException.

PS C:\Spielwiese\data-nullable> dotnet build –force
Wiederherstellung abgeschlossen (0,3s)
data-nullable Erfolgreich (0,3s) → bin\Debug\net9.0\data-nullable.dll

Erstellen von Erfolgreich in 0,9s

Build sagt: Alles top. Das kennen wir.

Was können wir also tun? Wo ist jetzt die Unterstützung? Ganz einfach.

In die csproj Datei folgendes xml Tag einführen:

enable

Sieht dann so aus:

Wenn wir jetzt den Build anstoßen sehen die Meldungen so aus:

PS C:\Spielwiese\data-nullable> dotnet build –force
Wiederherstellung abgeschlossen (0,3s)
data-nullable erfolgreich mit 2 Warnung(en) (0,3s) → bin\Debug\net9.0\data-nullable.dll
C:\Spielwiese\data-nullable\Program.cs(5,23): warning CS8600: Das NULL-Literal oder ein möglicher NULL-Wert wird in einen Non-Nullable-Typ konvertiert.
C:\Spielwiese\data-nullable\Program.cs(7,22): warning CS8602: Dereferenzierung eines möglichen Nullverweises.

Erstellen von erfolgreich mit 2 Warnung(en) in 0,9s

Jetzt haben wir zwei Warnings. Das ist mir aber immer noch nicht genug. Was gibt es noch mehr. Ich möchte Fehler keine Warnings.
Hier der nächste xml Tag:

Nullable
Wir brauchen nicht sämliche Warnings aufzählen, sondern es geht so.
So sieht das dann aus:

Wenn wir jetzt den Build nochmal anstoßen kommt das dabei raus:

PS C:\Spielwiese\data-nullable> dotnet build –force
Wiederherstellung abgeschlossen (0,3s)
data-nullable fehlerhaft mit 2 Fehler(n) (0,2s)
C:\Spielwiese\data-nullable\Program.cs(5,23): error CS8600: Das NULL-Literal oder ein möglicher NULL-Wert wird in einen Non-Nullable-Typ konvertiert.
C:\Spielwiese\data-nullable\Program.cs(7,22): error CS8602: Dereferenzierung eines möglichen Nullverweises.

Erstellen von fehlerhaft mit 2 Fehler(n) in 0,9s

Zwei Errors na endlich. Was muss ich jetzt machen? Richtig den Code anpassen.

Die Variabel name versehe ich mit dem Nullable Type und die Zugriff prüfe ich endsprechend auf Null. Damit ist meine NullReferenceException Geschichte und ich wurde bei dem Auffinden von potentiellen Schwachstellen geholfen.

Code sieht dann so aus:

Wenn ich jetzt den Build anstoße kommt das raus:

PS C:\Spielwiese\data-nullable> dotnet build –force
Wiederherstellung abgeschlossen (0,3s)
data-nullable Erfolgreich (0,3s) → bin\Debug\net9.0\data-nullable.dll

Erstellen von Erfolgreich in 0,9s

Zur Laufzeit keine Exception und die length Variable wird mit 0 initialisiert.