Oft findet man im Code ewig lange if – else Verzweigungen, die zuviel Platz einnehmen und irgendwann die Übersicht rauben.
Die beiden Operatoren ? : und ?? sehen merkwürdig aus, sind aber in der Handhabung sehr praktikabel.
Der ? : prüft ob der Wert true ist. Falls ja, zählt der linke Wert, wenn nicht, zählt der Wert rechts davon.
1 2 3 4 5 6 7 8 |
StringBuilder sb = new StringBuilder(); int a = 5; //Vergleich ist true, also wird dem Stringbuilder 1 hinzugefügt sb.Append(a == 5 ? 1 : 0); //Vergleich ist false, also wird dem Stringbuilder "Birne" hinzugefügt sb.Append(a == 3 ? "Apfel" : "Birne"); |
Der ?? Operator prüft, ob der Wert null ist. Bei nein, zählt der linke Wert, bei ja der rechte.
1 2 3 4 5 6 7 |
string a = null; //string b hat den Wert "Hallo Welt", weil a null ist string b = a ?? "Hallo Welt" string a = "Tschüss Welt"; //string b hat den Wert "Tschüss Welt", weil a nicht null ist string b = a ?? "Hallo Welt" |
Das ganze in lang könnte so aussehen:
1 2 3 4 5 6 7 8 9 10 11 |
StringBuilder sb = new StringBuilder(); int a = 5; if (a == 5) { sb.Append(1) } else { sb.Append(0) } |
1 2 3 4 5 6 7 8 9 10 11 |
string a = null; string b = ""; if (a == null) { b = "Hallo Welt" } else { b = "Tschüss Welt" } |
Ab C# 6 soll noch das Feature hinzufügen, dass auch das “Elternobjekt” geprüft werden kann, ob dieser nicht null ist.
1 2 3 4 5 6 7 |
Personal per = new Personal(); // Ausgabe "Hans" per.Name = "Hans" Console.WriteLine(per?.Name) Personal per = null; //Keine Ausgabe, weil das Elternobjekt null ist Console.WriteLine(per?.Name) |
Login