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.

Über den Autor

Norbert Eder

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