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

Los tipos que aceptan valores NULL son instancias de la estructura System.Nullable<T>.Nullable types are instances of the System.Nullable<T> struct. Los tipos que aceptan valores NULL pueden representar todos los valores de un tipo T subyacente y un valor NULL adicional.Nullable types can represent all the values of an underlying type T, and an additional null value. EL tipo T subyacente puede ser cualquier tipo de valor que no acepte valores NULL.The underlying type T can be any non-nullable value type. T no puede ser un tipo de referencia.T cannot be a reference type.

Por ejemplo, puede asignar null o cualquier valor entero de Int32.MinValue a Int32.MaxValue a un elemento Nullable<int> y true, false o null a un elemento Nullable<bool>.For example, you can assign null or any integer value from Int32.MinValue to Int32.MaxValue to a Nullable<int> and true, false, or null to a Nullable<bool>.

Los tipos que aceptan valores NULL se usan cuando es necesario representar el valor indefinido de un tipo subyacente.You use a nullable type when you need to represent the undefined value of an underlying type. Una variable booleana solo puede tener dos valores: true y false.A Boolean variable can have only two values: true and false. No hay ningún valor "sin definir".There is no "undefined" value. En muchas aplicaciones de programación, especialmente en las interacciones de las bases de datos, el valor de una variable puede ser indefinido o incluso no estar disponible.In many programming applications, most notably database interactions, a variable value can be undefined or missing. Por ejemplo, un campo de una base de datos puede contener los valores true o false, pero también puede no contener ningún valor.For example, a field in a database may contain the values true or false, or it may contain no value at all. En tal caso, se usa un tipo Nullable<bool>.You use a Nullable<bool> type in that case.

Los tipos que aceptan valores NULL tienen la siguientes características:Nullable types have the following characteristics:

  • Los tipos que aceptan valores NULL representan variables de tipo de valor a las que se puede asignar el valor null.Nullable types represent value-type variables that can be assigned the null value. No se puede crear un tipo que acepta valores NULL basado en un tipo de referencia.You cannot create a nullable type based on a reference type. (Los tipos de referencia ya admiten el valor null).(Reference types already support the null value.)

  • La sintaxis T? es una abreviatura de Nullable<T>.The syntax T? is shorthand for Nullable<T>. Las dos formas son intercambiables.The two forms are interchangeable.

  • Asigne un valor a un tipo que acepta valores NULL del mismo modo que para un tipo de valor subyacente: int? x = 10; o double? d = 4.108;.Assign a value to a nullable type just as you would for an underlying value type: int? x = 10; or double? d = 4.108;. También puede asignar el valor null: int? x = null;.You also can assign the null value: int? x = null;.

  • Use las propiedades de solo lectura Nullable<T>.HasValue y Nullable<T>.Value para probar si hay valores NULL y recuperar el valor, como se muestra en el ejemplo siguiente: if (x.HasValue) y = x.Value;Use the Nullable<T>.HasValue and Nullable<T>.Value readonly properties to test for null and retrieve the value, as shown in the following example: if (x.HasValue) y = x.Value;

  • También puede utilizar los operadores == y != con un tipo que acepta valores NULL, como se muestra en el ejemplo siguiente: if (x != null) y = x.Value;.You can also use the == and != operators with a nullable type, as shown in the following example: if (x != null) y = x.Value;. Si a y b son ambos NULL, a == b se evalúa como true.If a and b are both null, a == b evaluates to true.

  • A partir de C# 7.0, se puede usar la coincidencia de patrones tanto para examinar como para obtener un valor de un tipo que acepta valores NULL: if (x is int valueOfX) y = valueOfX;.Beginning with C# 7.0, you can use pattern matching to both examine and get a value of a nullable type: if (x is int valueOfX) y = valueOfX;.

  • El valor predeterminado de T? es una instancia cuya propiedad HasValue devuelve false.The default value of T? is an instance whose HasValue property returns false.

  • Use el método GetValueOrDefault() para devolver el valor asignado, o bien el valor predeterminado del tipo subyacente si el valor es null.Use the GetValueOrDefault() method to return either the assigned value, or the default value of the underlying value type if the value of the nullable type is null.

  • Use el método GetValueOrDefault(T) para devolver el valor asignado, o bien el valor predeterminado proporcionado si el valor es null.Use the GetValueOrDefault(T) method to return either the assigned value, or the provided default value if the value of the nullable type is null.

  • Use el operador de fusión NULL (??) para asignar un valor a un tipo subyacente basado en un valor del tipo que acepta valores NULL: int? x = null; int y = x ?? -1;.Use the null-coalescing operator, ??, to assign a value to an underlying type based on a value of the nullable type: int? x = null; int y = x ?? -1;. En el ejemplo, dado que x es NULL, el valor resultante de y es -1.In the example, since x is null, the result value of y is -1.

  • Si se establece una conversión definida por el usuario entre dos tipos de datos, esa misma conversión también se puede usar con las versiones que aceptan valores NULL de dichos tipos de datos.If a user-defined conversion is defined between two data types, the same conversion can also be used with the nullable versions of these data types.

  • No se permiten los tipos anidados que aceptan valores NULL.Nested nullable types are not allowed. La línea siguiente no se compilará: Nullable<Nullable<int>> n;The following line doesn't compile: Nullable<Nullable<int>> n;

Para más información, consulte los temas Uso de tipos que aceptan valores NULL y Cómo: Identificar tipos que aceptan valores NULLFor more information, see the Using nullable types and How to: Identify a nullable type topics.

Vea tambiénSee also