Zwei Fragezeichen in C#: Was sie bedeuten und wie man sie verwendet

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Zwei Fragezeichen in C#: Kein Fehler, sondern ein mächtiges Werkzeug

\n\n

Stellen Sie sich vor: Sie schreiben Code in C# und sehen plötzlich die Konstruktion ??. Der erste Gedanke – ein Tippfehler? Ein überflüssiges Zeichen? Tatsächlich ist dies einer der elegantesten und nützlichsten Operatoren der Sprache – der Null-Coalescing-Operator. Wenn Sie jemals eine NullReferenceException abgefangen und alles verflucht haben – dieser Operator wird Ihr Rettungsanker sein.

\n\n

In diesem Artikel werden wir analysieren, was zwei Fragezeichen in C# bedeuten, wie man sie richtig verwendet, wie sie sich vom ternären Operator unterscheiden, und wir zeigen Ihnen praktische Beispiele aus der Praxis. Los geht's!

\n\n

Was ist der ??-Operator in C#?

\n\n

Der Operator ?? (zwei Fragezeichen) ist ein binärer Operator, der den linken Operanden zurückgibt, wenn dieser nicht null ist; andernfalls gibt er den rechten Operanden zurück. Einfach gesagt: „Wenn links nicht null ist – nimm links, sonst nimm rechts“.

\n\n

Die Syntax ist denkbar einfach:

\n\n
var result = left ?? right;
\n\n

Wobei:

\n
    \n
  • left – der Wert, der null sein kann;
  • \n
  • right – der Standardwert (darf nicht null sein, wenn der rechte Typ nullable ist).
  • \n
\n\n

Erstes Beispiel: Rettung vor null

\n\n

Angenommen, Sie haben eine Variable string? name (nullable string). Sie möchten den Benutzernamen ausgeben, und wenn es keinen gibt – „Gast“:

\n\n
string? name = GetUserName(); // kann null zurückgeben\nstring displayName = name ?? "Gast";\nConsole.WriteLine(displayName);
\n\n

Ohne den ??-Operator müssten Sie schreiben:

\n\n
string displayName = (name != null) ? name : "Gast";
\n\n

Geben Sie zu, die erste Variante liest sich wie ein normaler Satz: „Name oder Gast“. Schön, oder?

\n\n

Der ??=-Operator: Die nächste Generation des Null-Coalescing

\n\n

Seit C# 8.0 gibt es den Operator ??= – eine Kurzform der Zuweisung mit Null-Coalescing. Er weist den Wert des rechten Operanden dem linken zu, jedoch nur, wenn der linke Operand null ist.

\n\n

Syntax:

\n\n
left ??= right;
\n\n

Dies ist äquivalent zu:

\n\n
if (left == null) left = right;
\n\n

Beispiel mit ??=

\n\n
List<int>? numbers = null;\nnumbers ??= new List<int>(); // numbers ist jetzt = new List<int>()\nnumbers.Add(42);\nConsole.WriteLine(numbers.Count); // 1
\n\n

Beachten Sie: Wenn numbers bereits initialisiert wäre (nicht null), würde keine Zuweisung erfolgen. Dies ist ideal für die verzögerte Initialisierung.

\n\n

Vergleich mit dem ternären Operator (? :)

\n\n

Viele Anfänger verwechseln ?? mit dem ternären Operator ? :. Lassen Sie uns das ein für alle Mal klären:

\n\n
    \n
  • Ternärer Operator – eine Kurzform von if-else. Er prüft JEDE boolesche Bedingung: bedingung ? wert_wenn_true : wert_wenn_false.
  • \n
  • ??-Operator – prüft NUR auf null. Dies ist ein Spezialfall, der auf eine einzige Aufgabe zugeschnitten ist.
  • \n
\n\n

Beispiel für den ternären Operator:

\n\n
int age = 18;\nstring status = (age >= 18) ? "Erwachsen" : "Minderjährig";
\n\n

Und was passiert, wenn man versucht, ?? durch den ternären Operator zu ersetzen:

\n\n
string? name = null;\nstring displayName = name != null ? name : "Gast"; // funktioniert, aber länger\nstring displayName2 = name ?? "Gast"; // kürzer und verständlicher
\n\n

Fazit: Verwenden Sie ??, wenn Sie einfach einen Standardwert anstelle von null einsetzen müssen. Für alle anderen Bedingungen verwenden Sie den ternären Operator.

\n\n

Verkettung von ??-Operatoren

\n\n

Sie können mehrere ??-Operatoren zu einer Kette verbinden. Dies ist praktisch, wenn es mehrere mögliche Quellen für einen Wert gibt:

\n\n
string? firstChoice = GetFromCache                

Blogs

Buchempfehlungen