Compartilhar via


Executando a conversão boxing de tipos anuláveis (Guia de Programação em C#)

Objetos com base em tipos anuláveis são in a box somente se o objeto não for nulo. Se HasValue é false, a referência de objeto é atribuída a null em vez de boxe. Por exemplo:

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

Se o objeto não for nulo – se HasValue é true – então boxing ocorre, mas somente o tipo subjacente que o objeto anulável se baseia for in a box. Boxing um tipo de valor nulo de não-nulos caixas o tipo de valor em si, não o Nullable que envolve o tipo de valor. Por exemplo:

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

Os dois objetos in a box são idênticos aos criados por tipos de conversão boxing não anuláveis. E, assim como os tipos de processador in a box não anuláveis, eles podem ser desemoldurados para tipos anuláveis, como no exemplo a seguir:

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

Comentários

O comportamento dos tipos anuláveis quando o processador in a box oferece duas vantagens:

  1. Objetos anuláveis e sua contraparte in a box podem ser testados para null:

      bool? b = null;
      object boxedB = b;
      if (b == null)
      {
        // True.
      }
      if (boxedB == null)
      {
        // Also true.
      }
    
  2. Processador in a box tipos anuláveis totalmente suportam a funcionalidade do tipo subjacente:

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

Consulte também

Tarefas

Como identificar um tipo anulável (Guia de Programação em C#)

Referência

Tipos anuláveis (Guia de Programação em C#)

Conceitos

Guia de Programação em C#