Boxing von Typen, die NULL-Werte zulassen (C#-Programmierhandbuch)

Objekte, die auf Typen basieren, die NULL-Werte zulassen, werden nur dann umschlossen, wenn das Objekt ungleich NULL ist. Wenn <xref:System.Nullable%601.HasValue%2A> false ist, wird der Objektverweis null zugewiesen, anstatt dass er geboxt wird. Zum Beispiel:

bool? b = null;  
object o = b;  
// Now o is null.  

Wenn das Objekt ungleich NULL und <xref:System.Nullable%601.HasValue%2A> true ist, kommt es zum Boxing. Allerdings wird nur der zugrunde liegende Typ, auf dem das auf NULL festlegbare Objekt basiert, geboxt. Das Boxing eines nicht auf NULL festlegbaren Werttyps umschließt den Werttyp selbst und nicht das <xref:System.Nullable%601?displayProperty=fullName>-Objekt, das den Werttyp umschließt. Zum Beispiel:

bool? b = false;  
int? i = 44;  
object bBoxed = b; // bBoxed contains a boxed bool.  
object iBoxed = i; // iBoxed contains a boxed int.  

Die beiden geboxten Objekte stimmen mit Objekten überein, die beim Boxing von nicht auf NULL festlegbaren Typen entstehen. Sie können, genauso wie nicht auf NULL festlegbare Typen, in auf NULL festlegbare Typen „ausgewickelt“ werden, so wie in folgendem Beispiel:

bool? b2 = (bool?)bBoxed;  
int? i2 = (int?)iBoxed;  

Hinweise

Das Verhalten von umschlossenen, auf NULL festlegbaren Typen hat zwei Vorteile:

  1. Auf NULL festlegbare Objekte und ihre umschlossenen Gegenstücke könne auf NULL getestet werden:

    bool? b = null;  
    object boxedB = b;  
    if (b == null)  
    {  
      // True.  
    }  
    if (boxedB == null)  
    {  
      // Also true.  
    }  
    
  2. Umschlossene, auf NULL festlegbare Typen unterstützen die Funktionen des zugrundeliegenden Typs vollständig:

    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

C#-Programmierhandbuch
Typen, die NULL-Werte zulassen
Gewusst wie: Identifizieren eines Typs mit Nullwerten