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

Los tipos que aceptan valores NULL son instancias del struct 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.

Para obtener más ejemplos, vea Utilizar tipos que aceptan valores NULL (Guía de programación de C#).

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. Un tipo que acepta valores null también puede tener asignado el valor null: int? x = null.

  • 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 solo lectura HasValue y Value para comprobar si el valor es NULL y recuperar el valor, como se muestra en el ejemplo siguiente: if(x.HasValue) j = x.Value;

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

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

    • El valor predeterminado para HasValue es false. La propiedad Value no tiene valor predeterminado.

    • También puede usar los operadores == y != con un tipo que acepta valores null, como se muestra en el ejemplo siguiente: if (x != null) y = x;

  • Utilice el operador ?? para asignar un valor predeterminado que se aplicará cuando un tipo que acepta valores NULL cuyo valor actual sea nullse asigne a un tipo que no acepte valores 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 Especificación del lenguaje C#. La especificación del lenguaje es la fuente definitiva de la sintaxis y el uso de C#.

Vea también

Referencia

Nullable

Conceptos

Guía de programación de C#

Otros recursos

Visual C#

Referencia de C#

What exactly does 'lifted' mean?