"??"-Operator in C# 👍 👎

In meinem Beitrag zu NULL für Werttypen in C# hatte ich bereits beschrieben, wie man Werttypen in C# (z. B. bool, int) indirekt dazu bewegen kann, auch null zu akzeptieren, was ansonsten ja nicht möglich ist.

Nun kann es hin und wieder (z. B. zur Arbeit mit externen Bibliotheken) jedoch notwendig sein, diesen Wert einer Variable grundsätzlich gleichen Typs zuzuweisen, die jedoch kein null akzeptiert. Behelfen kann man sich in derartigen Fällen selbstverständlich mit Konstrukten wie diesem:
Zuweisung ohne ??-Operator
010203040506
bool? isValid = null;
bool isRealValid = false;if(isValid.HasValue) { isRealValid = isValid.Value;} // "isRealValid" enthält "false", wenn "isValid" (ebenfalls) "false" oder "null" ist
Etwas kompakter geht es jedoch mit dem ??-Operator (nicht zu verwechseln mit dem ternären ?:-Operator):
Zuweisung mit ??-Operator
01020304
bool? isValid = null;
bool isRealValid = isValid ?? false;// "isRealValid" enthält "false", wenn "isValid" (ebenfalls) "false" oder "null" ist
Der Wert hinter dem Operator dient also als Ersatzwert für null. In beiden Fällen gilt jedoch zu beachten, dass die ursprüngliche Semantik nicht erhalten bleibt. Einem reinen Werttyp kann nun einmal kein null zugewiesen werden, d. h. man muss sich für diesen Fall einen angemessenen Ersatz (z. B. -1 für int) suchen.

Im Übrigen funktioniert das mit beliebigen Referenztypen (deren Wert schließlich immer null sein darf), womit sich beispielsweise bequem Standardobjekte zuweisen lassen:
Standardobjekt per ??-Operator zuweisen
01020304050607080910
/** * "dbUser" soll z. B. aus einer Datenbank * kommen, wurde dort jedoch nicht gefunden.**/User dbUser = null;
User user = dbUser ?? new User() { Nickname = "Gast", IsGuest = true}; // "user" ist ein Gast, wenn "dbUser" auf "null" steht


Projektverweise

Kategorien / Archiv  |  Übersicht RSS-Feed

Schlagworte

Suche