Compartir a través de


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

Puede utilizar el operador typeof de C# para crear un objeto Type que represente un tipo que acepta valores NULL:

System.Type type = typeof(int?);

También puede utilizar las clases y métodos del espacio de nombres System.Reflection para generar objetos Type que representen tipos que aceptan valores NULL. Sin embargo, si intenta obtener información de tipo de las variables que aceptan valores NULL en tiempo de ejecución mediante el método GetType o el operador is, el resultado será un objeto Type que representa el tipo subyacente y no el propio tipo que acepta valores NULL.

La llamada a GetType en un tipo que acepta valores NULL origina que se ejecute una operación de conversión boxing cuando el tipo se convierte implícitamente en Object. Por consiguiente, GetType siempre devuelve un objeto Type que representa el tipo subyacente y no el tipo que acepta valores NULL.

  int? i = 5;
  Type t = i.GetType();
  Console.WriteLine(t.FullName); //"System.Int32"

El operador is de C# funciona también en el tipo subyacente de un tipo que acepta valores NULL. Por tanto, no puede utilizar is para determinar si una variable es un tipo que acepta valores NULL. El ejemplo siguiente muestra que el operador is trata una variable <int> que acepta valores NULL como un valor int.

  static void Main(string[] args)
  {
    int? i = 5;
    if (i is int) // true
      //…
  }

Ejemplo

Utilice el código siguiente para determinar si un objeto Type representa un tipo que acepta valores NULL. Recuerde que este código siempre devuelve false si el objeto Type se devuelve de una llamada a GetType, como se ha explicado anteriormente en este mismo tema.

if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>)) {…}

Vea también

Referencia

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

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