Null-Handling
Einfacher Eigenschaften Zugriff mit Null-Konditionaloperator
Person person = null;
string name = person?.Name;
Console.WriteLine(name);
// Ausgabe: nichts (name ist null, keine Exception)
Verschachtelter Zugriff mit Null-Konditionaloperator
Da Wohnort
null ist, führt person?.Wohnort?.Stadt
nicht zu einer Exception, sondern gibt null zurück.
class Adresse {
public string Stadt { get; set; }
}
class Person {
public Adresse Wohnort { get; set; }
}
Person person = new Person(); // Wohnort ist standardmäßig null
string stadt = person?.Wohnort?.Stadt;
Console.WriteLine(stadt); // Ausgabe: nichts (stadt ist null)
Null Prüfung & Zuweisung
- Prüft ob
obj
nicht null ist. - Castet
obj
gleichzeitig in die Variableparticipant
– praktisch, wenn man anschließend mit dem Objekt arbeiten will.
if (obj is { } thing)
{
// do something with thing
}
Methodenzugriff mit Null-Prüfung
Hier verhindert der ?. Operator, dass versucht wird, die Methode Addiere
aufzurufen, wenn rechner
null ist.
class Rechner {
public int? Addiere(int a, int b) => a + b;
}
Rechner rechner = null;
int? ergebnis = rechner?.Addiere(3, 4);
Console.WriteLine(ergebnis); // Ausgabe: nichts (ergebnis ist null)
Sicherer Zugriff auf Array
Der Zugriff auf das erste Element wird nur durchgeführt, wenn namen nicht null ist. Da namen null ist, wird der gesamte Ausdruck zu null.
string[] namen = null;
int? laenge = namen?[0]?.Length;
Console.WriteLine(laenge);
// Ausgabe: nichts (laenge ist null)
// -> Keine Null-Reference Exception
Obj-Zugriff mit Default Fallback
Zuerst wird mit dem Null-Konditionaloperator geprüft, ob person
(und damit person.Name
) null ist. Falls ja, liefert der Ausdruck null und der ??-Operator (Null-Koaleszensoperator) liefert den Fallback-Wert "Unbekannt".
Person person = null;
string name = person?.Name ?? "Unbekannt";
Console.WriteLine(name);
Array mit Null zu Liste ohne Null (LinQ)
var listeOhneNull = arrayMitNull.Where(a => a != null).ToList();