Exportar (0) Imprimir
Expandir todo

Estructura genérica Nullable

Nota: esta estructura es nueva en la versión 2.0 de .NET Framework.

Representa un objeto cuyo tipo subyacente es un tipo de valor al que también se le puede asignar referencia de objeto null (Nothing en Visual Basic) como tipo de referencia.

Espacio de nombres: System
Ensamblado: mscorlib (en mscorlib.dll)

[SerializableAttribute] 
public struct Nullable<T> where T : struct
J# admite el uso de métodos y tipos genéricos, pero no admite la declaración de métodos y tipos nuevos.
JScript no admite el uso de métodos y tipos genéricos.

Se dice que un tipo admite valores NULL si se le puede asignar un valor o se le puede asignar referencia de objeto null (Nothing en Visual Basic), lo que significa que el tipo no tiene ningún valor en absoluto. En consecuencia, un tipo que acepta valores NULL puede expresar tanto un valor, como que no existe ningún valor. Por ejemplo, un tipo de referencia como String admite valores NULL, mientras que un tipo de valor como Int32 no los acepta. Un tipo de valor no acepta valores NULL porque tiene la capacidad justa para expresar los valores apropiados para ese tipo; no tiene la capacidad adicional necesaria para expresar un valor NULL.

La estructura Nullable admite que sólo se utilice un tipo de valor como tipo que acepta valores NULL porque hace referencia a los tipos que aceptan valores NULL por diseño.

La clase Nullable proporciona compatibilidad complementaria para la estructura Nullable. La clase Nullable admite la obtención del tipo subyacente de un tipo que acepta valores NULL y las operaciones de comparación e igualdad en pares de tipos que aceptan valores NULL y cuyos tipos subyacentes de valor no admiten las operaciones genéricas de comparación e igualdad.

Escenario

Utilice tipos que acepten valores NULL para representar algo que existe o no existe, dependiendo de las circunstancias. Por ejemplo, un atributo opcional de una etiqueta HTML podría existir en una etiqueta pero no en otra, o una columna que acepta valores NULL en una tabla de base de datos podría existir en una fila de la tabla pero no en otra.

Puede representar el atributo o la columna como un campo de una clase, y puede definir el campo como un tipo de valor. El campo puede contener todos los valores válidos para el atributo o la columna, pero no puede alojar un valor adicional que indique que el atributo o la columna no existe. En ese caso, defina el campo para que sea de un tipo que acepte valores NULL en lugar de un tipo de valor.

Propiedades fundamentales

Los dos miembros fundamentales de la estructura Nullable son las propiedades HasValue y Value. Si la propiedad HasValue de un objeto Nullable es true, se puede tener acceso al valor del objeto con la propiedad Value. Si la propiedad HasValue es false, el valor del objeto está sin definir y, al intentar tener acceso a la propiedad Value, se produce una excepción InvalidOperationException.

Conversión boxing y conversión unboxing

Cuando a un tipo que acepta valores NULL se le ha aplicado la conversión boxing, Common Language Runtime aplica la conversión boxing automáticamente al valor subyacente del objeto Nullable, y no al propio objeto Nullable. Es decir, si la propiedad HasValue es true, se aplica la conversión boxing al contenido de la propiedad Value. Si la propiedad HasValue es false, se aplica la conversión boxing a referencia de objeto null (Nothing en Visual Basic). Cuando se ha aplicado la conversión unboxing al valor subyacente de un tipo que acepta valores NULL, Common Language Runtime crea una nueva estructura Nullable inicializada en el valor subyacente.

En el ejemplo de código siguiente se definen tres filas de una tabla de la base de datos de ejemplo Microsoft Pubs. La tabla contiene dos columnas que no aceptan valores NULL y dos columnas que sí los aceptan.

// This code example demonstrates the Nullable<T> class.
// The code example defines a database table in which two columns 
// are nullable. In the application, an array of rows is created 
// and initialized. The table rows could subsequently be 
// written to a database.

using System;

class Sample 
{
// Define the "titleAuthor" table of the Microsoft "pubs" database. 
    public struct titleAuthor 
    {
    // Author ID; format ###-##-####
    public string au_id;
    // Title ID; format AA####
    public string title_id;
    // Author ORD is nullable.
    public short? au_ord;
    // Royalty Percent is nullable.
    public int? royaltyper;
    }

    public static void Main() 
    {
// Declare and initialize the titleAuthor array.
    titleAuthor[] ta = new titleAuthor[3];
    ta[0].au_id = "712-32-1176";
    ta[0].title_id = "PS3333";
    ta[0].au_ord = 1;
    ta[0].royaltyper = 100;
  
    ta[1].au_id = "213-46-8915";
    ta[1].title_id = "BU1032";
    ta[1].au_ord = null;
    ta[1].royaltyper = null;

    ta[2].au_id = "672-71-3249";
    ta[2].title_id = "TC7777";
    ta[2].au_ord = null;
    ta[2].royaltyper = 40;

// Display the values of the titleAuthor array elements, and 
// display a legend.
    Display("Title Authors Table", ta);
    Console.WriteLine("Legend:");
    Console.WriteLine("An Author ORD of -1 means no value is defined.");
    Console.WriteLine("A Royalty % of 0 means no value is defined.");
    }

// Display the values of the titleAuthor array elements.
    public static void Display(string dspTitle, 
                               titleAuthor[] dspAllTitleAuthors)
    {
    Console.WriteLine("*** {0} ***", dspTitle);
    foreach (titleAuthor dspTA in dspAllTitleAuthors)
       {
       Console.WriteLine("Author ID ... {0}", dspTA.au_id);
       Console.WriteLine("Title ID .... {0}", dspTA.title_id);
       Console.WriteLine("Author ORD .. {0}", dspTA.au_ord ?? -1);
       Console.WriteLine("Royalty % ... {0}", dspTA.royaltyper ?? 0);
       Console.WriteLine();       
       }
    }
}

/*
This code example produces the following results:

*** Title Authors Table ***
Author ID ... 712-32-1176
Title ID .... PS3333
Author ORD .. 1
Royalty % ... 100

Author ID ... 213-46-8915
Title ID .... BU1032
Author ORD .. -1
Royalty % ... 0

Author ID ... 672-71-3249
Title ID .... TC7777
Author ORD .. -1
Royalty % ... 40

Legend:
An Author ORD of -1 means no value is defined.
A Royalty % of 0 means no value is defined.

*/

Los miembros estáticos públicos (Shared en Visual Basic) de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium, Windows Mobile para Pocket PC, Windows Mobile para Smartphone, Windows Server 2003, Windows XP Media Center, Windows XP Professional x64, Windows XP SP2, Windows XP Starter Edition

.NET Framework no admite todas las versiones de cada plataforma. Para obtener una lista de las versiones admitidas, vea Requisitos del sistema.

.NET Framework

Compatible con: 2.0

.NET Compact Framework

Compatible con: 2.0

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft