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

Actualización: noviembre 2007

Los tipos que aceptan valores NULL son instancias de la estructura System.Nullable<T>. Un tipo que acepta valores NULL puede representar el intervalo de valores correcto para su tipo de valor subyacente, además de un valor null adicional. Por ejemplo, a un tipo Nullable<Int32> se le puede asignar cualquier valor entre -2147483648 y 2147483647, o el valor null. A Nullable<bool> se le pueden asignar los valores true, false o null. La posibilidad de asignar null a tipos numéricos y booleanos resulta especialmente útil para trabajar con bases de datos y otros tipos de datos que contienen elementos que pueden no tener un valor asignado. Por ejemplo, un campo Boolean de una base de datos puede almacenar los valores true o false, o puede ser indefinido.

class NullableExample
{
    static void Main()
    {
        int? num = null;
        if (num.HasValue == true)
        {
            System.Console.WriteLine("num = " + num.Value);
        }
        else
        {
            System.Console.WriteLine("num = Null");
        }

        // y is set to zero
        int y = num.GetValueOrDefault();

        // num.Value throws an InvalidOperationException if num.HasValue is false
        try
        {
            y = num.Value;
        }
        catch (System.InvalidOperationException e)
        {
            System.Console.WriteLine(e.Message);
        }
    }
}

El ejemplo mostrará este resultado:

num = Null

Nullable object must have a value.

Información general acerca de los tipos que aceptan valores NULL

Los tipos que aceptan valores NULL tienen las características siguientes:

  • Los tipos que aceptan valores NULL representan variables de tipo de valor a las que se puede asignar el valor null. No se puede crear un tipo que acepta valores NULL basado en un tipo de referencia. (Los tipos de referencia ya admiten el valor null.)

  • La sintaxis T? es la forma abreviada de Nullable<T>, donde T es un tipo de valor. Las dos formas son intercambiables.

  • Asigne un valor a un tipo que acepte valores NULL como si se tratara de un tipo de valor normal; por ejemplo, int? x = 10; o double? d = 4.108;

  • Utilice el método Nullable<T>.GetValueOrDefault para devolver el valor asignado o el valor predeterminado del tipo subyacente si el valor es null, por ejemplo int j = x.GetValueOrDefault();

  • Utilice las propiedades de sólo lectura HasValue y Value para comprobar si el valor es NULL y recuperar el valor, por ejemplo if(x.HasValue) j = x.Value;

    • La propiedad HasValue devuelve true si la variable contiene un valor o false si el valor es null.

    • La propiedad Value devuelve un valor si se ha asignado uno. De lo contrario, se produce una excepción System.InvalidOperationException.

    • El valor predeterminado de una variable de tipo que acepta valores NULL establece HasValue en false. El objeto Value no está definido.

  • Utilice el operador ?? para asignar un valor predeterminado que se aplicará cuando un tipo que acepta valores NULL cuyo valor actual sea NULL se asigne a una tipo que no acepte valore NULL, por ejemplo int? x = null; int y = x ?? -1;

  • No se permite la anidación de tipos que aceptan valores NULL. La línea siguiente no se compilará: Nullable<Nullable<int>> n;

Secciones relacionadas

Para obtener más información:

Especificación del lenguaje C#

Para obtener más información, vea la siguiente sección de Especificación del lenguaje C#.

  • 4.1.10 Tipos que aceptan valores NULL

Vea también

Tareas

Ejemplo Nullable

Conceptos

Guía de programación de C#

Referencia

Nullable

Otros recursos

Visual C#

Referencia de C#

What exactly does 'lifted' mean?