Condividi tramite


Conversione boxing di tipi nullable (Guida per programmatori C#)

La conversione boxing di oggetti basati su tipi nullable viene eseguita solo se l'oggetto non è null. Se l'oggetto HasValue è false, anziché eseguire la conversione boxing, il riferimento a un oggetto viene assegnato a null. Di seguito è riportato un esempio.

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

Se l'oggetto non è null, ovvero se l'oggetto HasValue è true, la conversione boxing viene eseguita, ma viene sottoposto a boxing solo il tipo sottostante su cui è basato l'oggetto nullable. La conversione boxing di un valore nullable non null viene eseguita sul tipo di valore stesso, non sul tipo System.Nullable<T> che lo incapsula. Di seguito è riportato un esempio.

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

I due oggetti boxed sono identici a quelli creati mediante il boxing di tipi non nullable. Proprio come per i tipi boxed non nullable, è possibile eseguirne la conversione unboxing in tipi nullable, come nell'esempio riportato di seguito:

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

Note

Il comportamento dei tipi nullable boxed presenta due vantaggi:

  1. Gli oggetti nullable e la controparte boxed possono essere testati per verificare se sono null:

      bool? b = null;
      object boxedB = b;
      if (b == null)
      {
        // True.
      }
      if (boxedB == null)
      {
        // Also true.
      }
    
  2. I tipi nullable boxed supportano completamente le funzionalità del tipo sottostante:

      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();
    

Vedere anche

Attività

Procedura: identificare un tipo nullable (Guida per programmatori C#)

Riferimenti

Tipi nullable (Guida per programmatori C#)

Concetti

Guida per programmatori C#