0Pricing
C# Academy · Lektion

Null-bedingter Operator

Sicherer Zugriff mit ?..

Null-bedingter Operator ist eine kostenlose C# Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C# Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C# Academy-Kurs umfasst insgesamt 4 Lektionen.

Das Problem mit Nullketten

Der Zugriff auf ein Member einer null-Referenz löst eine NullReferenceException aus. Das ist einer der häufigsten Laufzeitfehler in C#.

Wenn Sie Aufrufe wie user.Address.City verketten, kann jedes Glied der Kette null sein. Früher bestand die Lösung aus einer ganzen Reihe von if-Prüfungen.

Lernen Sie ?. kennen

Der null-bedingte Operator ?. bricht den gesamten Ausdruck kurzschlussartig ab. Wenn die linke Seite null ist, lautet das Ergebnis null statt dass eine Ausnahme ausgelöst wird.

Er lässt sich so lesen: „Greife auf dieses Member zu, aber nur, wenn das Objekt nicht null ist.“

string name = null;
int? length = name?.Length;
System.Console.WriteLine(length == null);

Das Ergebnis wird nullable

Da ?. den Wert null liefern kann, wird der Ergebnistyp nullable. name?.Length ist int? und nicht int.

Deshalb speichern Sie das Ergebnis in einem int? statt in einem gewöhnlichen int.

string text = "hello";
int? len = text?.Length;
System.Console.WriteLine(len);

Ein ausführbares Beispiel

Dieses Programm zeigt, dass ?. einen Wert zurückgibt, wenn das Objekt vorhanden ist, und null, wenn es nicht vorhanden ist.

Führen Sie es aus und beachten Sie, dass niemals eine Ausnahme ausgelöst wird.

using System;

class Program
{
    static void Main()
    {
        string a = "world";
        string b = null;
        Console.WriteLine(a?.ToUpper());
        Console.WriteLine(b?.ToUpper() ?? "(null)");
    }
}

Mehrere ?. verketten

Sie können ?. über mehrere Member hinweg verketten. Sobald ein beliebiger Teil null ist, wird die gesamte Kette beendet und gibt null zurück.

Daher ist customer?.Order?.Total sicher, selbst wenn customer oder Order null ist.

string s = null;
int? upperLen = s?.ToUpper()?.Length;
System.Console.WriteLine(upperLen == null);

Null-bedingter Indexer ?[]

Für Arrays und Listen gibt es die Indexer-Form ?[]. Wenn die Sammlung null ist, gibt der Indexzugriff null zurück, statt einen Fehler auszulösen.

Beachten Sie: Der Operator schützt davor, dass die Sammlung null ist, nicht vor einem Index außerhalb des gültigen Bereichs.

int[] data = null;
int? first = data?[0];
System.Console.WriteLine(first == null);

Methoden sicher aufrufen

?. schützt auch Methodenaufrufe. list?.Clear() ruft Clear nur auf, wenn list nicht null ist; andernfalls geschieht nichts.

Bei einer Methode, die void zurückgibt, wird die gesamte Anweisung bei null einfach zu einer leeren Operation.

System.Collections.Generic.List<int> list = null;
list?.Add(5);
System.Console.WriteLine("No crash");

Threadsicheres Auslösen von Ereignissen

Eine klassische Anwendung ist das Auslösen von Ereignissen. SomeEvent?.Invoke(this, args) löst das Ereignis nur dann sicher aus, wenn mindestens ein Handler registriert ist.

Dadurch wurde das frühere Muster mit einer Nullprüfung ersetzt, bei dem zwischen Prüfung und Aufruf ein Race-Condition-Problem auftreten konnte.

System.Action handler = null;
handler?.Invoke();
System.Console.WriteLine("Invoked safely");

Mit ?? kombinieren

?. lässt sich gut mit dem Null-Koaleszenzoperator ?? kombinieren, um einen Ersatzwert bereitzustellen, wenn die Kette null ist.

name?.Length ?? 0 gibt die Länge zurück oder 0, wenn name null ist.

string name = null;
int length = name?.Length ?? 0;
System.Console.WriteLine(length);

Eine wichtige Feinheit

Selbst wenn der endgültige Werttyp nicht nullable ist, macht die Verwendung von ?. den Ausdruck nullable. list?.Count ist int? und nicht int.

Wenn Sie einen gewöhnlichen int benötigen, fügen Sie ?? 0 an oder verwenden Sie GetValueOrDefault().

var list = new System.Collections.Generic.List<int> { 1, 2 };
int count = list?.Count ?? 0;
System.Console.WriteLine(count);

Vollständiger Vergleich

Dieses Programm stellt den ausführlichen Ansatz mit if der knappen Variante mit ?. gegenüber. Beide vermeiden die Ausnahme, aber ?. ist deutlich übersichtlicher.

using System;

class Program
{
    static void Main()
    {
        string s = null;
        int len = s != null ? s.Length : -1;
        Console.WriteLine(len);
        Console.WriteLine(s?.Length ?? -1);
    }
}

Kurztest

Testen Sie Ihr Verständnis des null-bedingten Operators.

Zusammenfassung

Der null-bedingte Operator ?. (und der Indexer ?[]) beendet den Memberzugriff, wenn das Objekt null ist, und gibt stattdessen null zurück, ohne eine Ausnahme auszulösen.

Das Ergebnis wird nullable. Kombinieren Sie den Operator daher mit ??, um einen Ersatzwert bereitzustellen.

Häufig gestellte Fragen

Ist die Lektion „Null-bedingter Operator“ kostenlos?

Ja — der vollständige Text von „Null-bedingter Operator“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C# Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C# Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Null-bedingter Operator“?

Sicherer Zugriff mit ?.. Du übst C# Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um C# Academy zu starten?

Keine Vorkenntnisse erforderlich. C# Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Null-bedingter Operator“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser C# Academy-Lektion Code schreiben und ausführen?

Ja. Jede C# Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Nullable-Wertetypen
  2. Null-bedingter Operator
  3. Null-Koaleszenzoperatoren
  4. Gegen Nullwerte absichern
← Zurück zu C# Academy