Wer kennt es nicht, das ständige Prüfen auf null bevor auf Eigenschaften zugegriffen oder Methoden ausgeführt werden. Damit wollen wir eine NullReferenceException möglichst vermeiden. Diese Prüfungen sehen etwa wie folgt aus:

Person firstPerson = null;
var newAddress = new Address();

if (firstPerson != null)
{
    firstPerson.Relocate(newAddress);
}

Weit schlimmer sieht das bei komplexeren Objektbäumen/Datenstrukturen aus. Mit C# 6.0 bietet mit dem null-conditional Operator eine Vereinfachung:

Person firstPerson = null;
var newAddress = new Address();

firstPerson?.Relocate(newAddress);

Mit ?. wird der Zugriff nur ausgeführt, wenn die Variable auf ein Objekt zeigt. Das funktioniert mittels ?[ allerdings auch für Index-Operationen:

var street = firstPerson?.Addresses?[0]?.Street;

Das sieht doch weit besser aus als:

string street;
if (firstPerson != null 
    && firstPerson.Addresses != null 
    && firstPerson.Addresses.Count > 0)
{
    if (firstPerson.Addresses[0] != null)
    {
        street = firstPerson.Addresses[0].Street;
    }
}

Oder nicht?

Der Einsatz bei Delegates/Events klappt ebenfalls wunderbar (thread-sicher):

public delegate void ChangeAddress(Address address);
...
public event ChangeAddress AddressChanged;
...
public void Relocate(Address address)
{
    PhysicalAddress = address;

    AddressChanged?.Invoke(address);
}

Die bisherige Variante im Vergleich dazu:

var changed = AddressChanged;
if (changed != null)
{
    changed(address);
}

Viel Spaß damit :)

Viele weitere Neuerungen finden sich in der C# 6 Serie.

Veröffentlicht von Norbert Eder

Ich bin ein leidenschaftlicher Softwareentwickler. Mein Wissen und meine Gedanken teile ich nicht nur hier im Blog, sondern auch in Fachartikeln und Büchern.

Beteilige dich an der Unterhaltung

1 Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

  1. Vielen Dank für diesen Beitrag.
    Die Erklärung war sehr ausführlich und trotzdem stand in diesem Beitrag nicht zuviel Text.
    Auch durch die Beispiele war der Code einfacher zu verstehen.

Cookie-Einstellungen
Auf dieser Website werden Cookie verwendet. Diese werden für den Betrieb der Website benötigt oder helfen uns dabei, die Website zu verbessern.
Alle Cookies zulassen
Auswahl speichern
Individuelle Einstellungen
Individuelle Einstellungen
Dies ist eine Übersicht aller Cookies, die auf der Website verwendet werden. Sie haben die Möglichkeit, individuelle Cookie-Einstellungen vorzunehmen. Geben Sie einzelnen Cookies oder ganzen Gruppen Ihre Einwilligung. Essentielle Cookies lassen sich nicht deaktivieren.
Speichern
Abbrechen
Essenziell (1)
Essenzielle Cookies werden für die grundlegende Funktionalität der Website benötigt.
Cookies anzeigen