Nullable<T> Nullable<T> Nullable<T> Nullable<T> Struct

Definição

Representa um tipo de valor que pode receber null.Represents a value type that can be assigned null.

generic <typename T>
 where T : value classpublic value class Nullable
[System.Serializable]
public struct Nullable<T> where T : struct
type Nullable<'T (requires 'T : struct)> = struct
Public Structure Nullable(Of T)

Parâmetros de tipo

T

O tipo de valor subjacente do tipo genérico Nullable<T>.The underlying value type of the Nullable<T> generic type.

Herança
Nullable<T>Nullable<T>Nullable<T>Nullable<T>
Atributos

Exemplos

O exemplo de código a seguir define três linhas de uma tabela no banco de dados de exemplo Pubs Microsoft.The following code example defines three rows of a table in the Microsoft Pubs sample database. A tabela contém duas colunas que não permitem valor nulo e duas colunas que permitem valor nulo.The table contains two columns that are not nullable and two columns that are nullable.

using namespace System;

// Define the "titleAuthor" table of the Microsoft "pubs" database.
value struct titleAuthor
{
    public:
       // Author ID; format ###-##-####
       String^ au_id;
       // Title ID; format AA####
       String^ title_id;
       // Author ORD is nullable.
       Nullable<short> au_ord;
       // Royalty Percent is nullable.
       Nullable<int> royaltyper;

    // Display the values of the titleAuthor array elements.
    static void Display(String^ dspTitle,
                        array<titleAuthor>^ dspAllTitleAuthors)
    {
       Console::WriteLine("*** {0} ***", dspTitle);
       for each (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.HasValue ?
                             dspTA.au_ord.Value : -1);
          Console::WriteLine("Royalty % ... {0}", dspTA.royaltyper.HasValue ?
                             dspTA.royaltyper.Value : 0);
          Console::WriteLine();
       }
    }
};

void main()
{
    // Declare and initialize the titleAuthor array.
    array<titleAuthor>^ ta = gcnew array<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 = nullptr;
//    ta[1].royaltyper = nullptr;

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

   // Display the values of the array elements, and
   // display a legend.
    titleAuthor::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.");
}
// The example displays the following output:
//       *** 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.
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();       
      }
    }
}
// The example displays the following output:
//     *** 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.
Class Sample
    ' Define the "titleAuthor" table of the Microsoft "pubs" database. 
    Public Structure titleAuthor
       ' Author ID; format ###-##-####
        Public au_id As String
        ' Title ID; format AA####
        Public title_id As String
        ' Author ORD is nullable.
        Public au_ord As Nullable(Of Short)
        ' Royalty Percent is nullable.
        Public royaltyper As Nullable(Of Integer)
    End Structure 
    
    Public Shared Sub Main() 
       ' Declare and initialize the titleAuthor array.
        Dim ta(2) As titleAuthor
        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 = Nothing
        ta(1).royaltyper = Nothing
        
        ta(2).au_id = "672-71-3249"
        ta(2).title_id = "TC7777"
        ta(2).au_ord = Nothing
        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.")
    End Sub
    
    ' Display the values of the titleAuthor array elements.
    Public Shared Sub Display(ByVal dspTitle As String, _
                              ByVal dspAllTitleAuthors() As titleAuthor) 
        Console.WriteLine("*** {0} ***", dspTitle)
        Dim dspTA As titleAuthor
        For Each 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.GetValueOrDefault(-1))
            Console.WriteLine("Royalty % ... {0}", dspTA.royaltyper.GetValueOrDefault(0))
            Console.WriteLine()
        Next 
    End Sub
End Class 
'This example displays the following output:
'     *** 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.

Comentários

Um tipo deve ser anulável se ele pode ser atribuído um valor ou pode ser atribuído null, que significa que o tipo não tem nenhum valor de qualquer tipo.A type is said to be nullable if it can be assigned a value or can be assigned null, which means the type has no value whatsoever. Por padrão, todos os tipos de referência, como String, são anulável, mas o valor de todos os tipos, como Int32, não são.By default, all reference types, such as String, are nullable, but all value types, such as Int32, are not.

Em C# e Visual Basic, você marca um tipo de valor como nulo usando o ? notação após o tipo de valor.In C# and Visual Basic, you mark a value type as nullable by using the ? notation after the value type. Por exemplo, int? em C# ou Integer? no Visual Basic declara um tipo de valor inteiro que pode ser atribuído null.For example, int? in C# or Integer? in Visual Basic declares an integer value type that can be assigned null.

O Nullable<T> estrutura dá suporte ao uso de apenas um tipo de valor como um tipo que permite valor nulo como tipos de referência são anuláveis por design.The Nullable<T> structure supports using only a value type as a nullable type because reference types are nullable by design.

O Nullable classe oferece suporte complementar para o Nullable<T> estrutura.The Nullable class provides complementary support for the Nullable<T> structure. O Nullable classe dá suporte a obter o tipo subjacente de um tipo anulável, e operações de comparação e igualdade em pares de tipos anuláveis, tipo de valor cujos subjacente não oferece suporte a operações de comparação e igualdade genéricas.The Nullable class supports obtaining the underlying type of a nullable type, and comparison and equality operations on pairs of nullable types whose underlying value type does not support generic comparison and equality operations.

Propriedades fundamentaisFundamental Properties

Os dois membros fundamentais dos Nullable<T> estrutura são as HasValue e Value propriedades.The two fundamental members of the Nullable<T> structure are the HasValue and Value properties. Se o HasValue propriedade para um Nullable<T> objeto é true, o valor do objeto pode ser acessado com o Value propriedade.If the HasValue property for a Nullable<T> object is true, the value of the object can be accessed with the Value property. Se o HasValue é de propriedade false, o valor do objeto é indefinido e uma tentativa de acessar o Value propriedade gera um InvalidOperationException.If the HasValue property is false, the value of the object is undefined and an attempt to access the Value property throws an InvalidOperationException.

Conversão boxing e unboxingBoxing and Unboxing

Quando um tipo que permite valor nulo é convertido, o common language runtime caixas automaticamente o valor subjacente dos Nullable<T> do objeto, não o Nullable<T> objeto propriamente dito.When a nullable type is boxed, the common language runtime automatically boxes the underlying value of the Nullable<T> object, not the Nullable<T> object itself. Ou seja, se o HasValue é de propriedade true, o conteúdo do Value propriedade é demarcada.That is, if the HasValue property is true, the contents of the Value property is boxed. Quando o valor subjacente de um tipo anulável é não demarcado, o common language runtime cria um novo Nullable<T> estrutura inicializada para o valor subjacente.When the underlying value of a nullable type is unboxed, the common language runtime creates a new Nullable<T> structure initialized to the underlying value.

Se o HasValue é de propriedade de um tipo anulável false, o resultado de uma operação de conversão boxing é null.If the HasValue property of a nullable type is false, the result of a boxing operation is null. Consequentemente, se um tipo anulável demarcado é passado para um método que espera um argumento de objeto, esse método deve estar preparado para lidar com o caso em que o argumento é null.Consequently, if a boxed nullable type is passed to a method that expects an object argument, that method must be prepared to handle the case where the argument is null. Quando null é submetido à conversão unboxing em um tipo que permite valor nulo, o common language runtime cria um novo Nullable<T> estrutura e inicializa seus HasValue propriedade false.When null is unboxed into a nullable type, the common language runtime creates a new Nullable<T> structure and initializes its HasValue property to false.

.NET Framework 4.5.1.NET Framework 4.5.1 e os componentes de tempo de execução do Windowsand Windows Runtime Components

Começando com o .NET Framework 4.5.1.NET Framework 4.5.1, você pode incluir um Nullable<T> tipo como um membro de uma estrutura exportado em uma biblioteca de WinMD.Starting with the .NET Framework 4.5.1.NET Framework 4.5.1, you can include a Nullable<T> type as a member of a structure exported in a WinMD library. Anteriormente, isso não era suportado.Previously, this was not supported.

Construtores

Nullable<T>(T) Nullable<T>(T) Nullable<T>(T) Nullable<T>(T)

Inicializa uma nova instância da estrutura Nullable<T> para o valor especificado.Initializes a new instance of the Nullable<T> structure to the specified value.

Propriedades

HasValue HasValue HasValue HasValue

Obtém um valor que indica se o objeto Nullable<T> atual tem um valor válido de seu tipo subjacente.Gets a value indicating whether the current Nullable<T> object has a valid value of its underlying type.

Value Value Value Value

Obtém o valor do objeto Nullable<T> atual se a ele foi atribuído um valor subjacente válido.Gets the value of the current Nullable<T> object if it has been assigned a valid underlying value.

Métodos

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Indica se o objeto Nullable<T> atual é igual a um objeto especificado.Indicates whether the current Nullable<T> object is equal to a specified object.

GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Recupera o código hash do objeto retornado pela propriedade Value.Retrieves the hash code of the object returned by the Value property.

GetValueOrDefault() GetValueOrDefault() GetValueOrDefault() GetValueOrDefault()

Recupera o valor do objeto Nullable<T> atual ou o valor padrão do tipo subjacente.Retrieves the value of the current Nullable<T> object, or the default value of the underlying type.

GetValueOrDefault(T) GetValueOrDefault(T) GetValueOrDefault(T) GetValueOrDefault(T)

Recupera o valor do objeto Nullable<T> atual ou o valor padrão especificado.Retrieves the value of the current Nullable<T> object, or the specified default value.

ToString() ToString() ToString() ToString()

Retorna a representação de texto do valor do atual objeto Nullable<T>.Returns the text representation of the value of the current Nullable<T> object.

Operadores

Explicit(Nullable<T> to T) Explicit(Nullable<T> to T) Explicit(Nullable<T> to T) Explicit(Nullable<T> to T)

Define uma conversão explícita de uma instância Nullable<T> para seu valor subjacente.Defines an explicit conversion of a Nullable<T> instance to its underlying value.

Implicit(T to Nullable<T>) Implicit(T to Nullable<T>) Implicit(T to Nullable<T>) Implicit(T to Nullable<T>)

Cria um novo objeto Nullable<T> inicializado para um valor especificado.Creates a new Nullable<T> object initialized to a specified value.

Aplica-se a

Veja também