Compartir a través de


Aplicar la conversión boxing a tipos que aceptan valores NULL (Guía de programación de C#)

La conversión boxing sólo se aplica a los objetos basados en tipos que aceptan valores NULL si el valor del objeto no es null. Si HasValue es false, la referencia de objeto se asigna a null en lugar de aplicar la conversión boxing Por ejemplo:

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

Si el objeto no es NULL (si HasValue es true), tiene lugar la conversión boxing, pero sólo se aplica al tipo subyacente en el que se basa el objeto que acepta valores NULL. La conversión boxing de un tipo de valor no NULL que acepta valores NULL se aplica al propio tipo de valor, no al objeto System.Nullable<T> que ajusta el tipo de valor. Por ejemplo:

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

Los dos objetos a los que se aplica la conversión boxing son idénticos a aquellos creados aplicando la conversión boxing a tipos que no aceptan valores NULL. Además, al igual que los tipos sin conversión boxing que aceptan valores NULL, se les puede aplicar la conversión unboxing en los tipos que aceptan valores NULL, como en el ejemplo siguiente:

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

Comentarios

El comportamiento de los tipos que aceptan valores NULL cuando se aplica la conversión boxing proporciona dos ventajas:

  1. Se comprueba si los objetos que aceptan valores NULL y sus homólogos a los que se aplica la conversión boxing tienen valores NULL:

      bool? b = null;
      object boxedB = b;
      if (b == null)
      {
        // True.
      }
      if (boxedB == null)
      {
        // Also true.
      }
    
  2. Los tipos que aceptan valores NULL y a los que se aplica la conversión boxing admiten la funcionalidad del tipo subyacente:

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

Vea también

Tareas

Cómo: Identificar tipos que aceptan valores NULL (Guía de programación de C#)

Referencia

Tipos que aceptan valores NULL (Guía de programación de C#)

Conceptos

Guía de programación de C#