Boxing von Typen, die NULL-Werte zulassen (C#-Programmierhandbuch)
Objekte, die auf Typen basieren, die NULL-Werte zulassen, werden nur geschachtelt, wenn das Objekt nicht NULL ist.Wenn HasValue den Wert false aufweist, wird das Objekt nicht geschachtelt. Stattdessen wird der Objektverweis einfach null zugewiesen.Beispiele:
bool? b = null;
object o = b;
// Now o is null.
Wenn das Objekt nicht NULL ist – wenn HasValue den Wert true aufweist –, findet das Boxing statt, es wird aber nur der zugrunde liegende Typ geschachtelt, auf dem das auf NULL festlegbare Objekt basiert.Beim Schachteln eines auf NULL festlegbaren Werttyps, der nicht NULL lautet, wird der Werttyp selbst und nicht das System.Nullable<T> geschachtelt, das den Werttyp umschließt.Beispiele:
bool? b = false;
int? i = 44;
object bBoxed = b; // bBoxed contains a boxed bool.
object iBoxed = i; // iBoxed contains a boxed int.
Die zwei geschachtelten Objekte sind identisch mit den Objekten, die durch das Schachteln von nicht auf NULL festlegbaren Typen erstellt werden.Und wie nicht auf NULL festlegbare geschachtelte Typen können sie mittels Unboxing in auf NULL festlegbare Typen konvertiert werden. Beispiel:
bool? b2 = (bool?)bBoxed;
int? i2 = (int?)iBoxed;
Hinweise
Das Verhalten von auf NULL festlegbaren geschachtelten Typen bietet zwei Vorteile:
Auf NULL festlegbare Objekte und ihre geschachtelten Entsprechungen können auf NULL-Werte getestet werden:
bool? b = null; object boxedB = b; if (b == null) { // True. } if (boxedB == null) { // Also true. }
Geschachtelte auf NULL festlegbare Typen unterstützen vollständig die Funktionen des zugrunde liegenden Typs:
double? d = 44.4; object iBoxed = d; // Access IConvertible interface implemented by double. IConvertible ic = (IConvertible)iBoxed; int i = ic.ToInt32(null); string str = ic.ToString();
Siehe auch
Aufgaben
Gewusst wie: Identifizieren eines Typs, der NULL-Werte zulässt (C#-Programmierhandbuch)
Referenz
Typen, die NULL-Werte zulassen (C#-Programmierhandbuch)