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 da 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 são anuláveis e duas colunas que são anuláveis.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 é considerado Anulável se ele pode ser atribuído a um valor ou pode ser atribuído null, o que significa que o tipo não tem valor qualquer.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, Stringcomo, são anuláveis, mas todos os tipos de Int32valor, como, não são.By default, all reference types, such as String, are nullable, but all value types, such as Int32, are not.

No C# e Visual Basic, você marca um tipo de valor como anulável usando a ? 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? in C# ou Integer? in 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.

A Nullable<T> estrutura dá suporte ao uso de apenas um tipo Value como um tipo anulável porque os 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.

A Nullable classe fornece suporte complementar para a Nullable<T> estrutura.The Nullable class provides complementary support for the Nullable<T> structure. A Nullable classe dá suporte à obtenção do tipo subjacente de um tipo anulável e operações de comparação e de igualdade em pares de tipos anuláveis cujo tipo de valor subjacente não oferece suporte a operações de igualdade e de comparação 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 da Nullable<T> estrutura são as HasValue Propriedades e Value .The two fundamental members of the Nullable<T> structure are the HasValue and Value properties. Se a HasValue propriedade de um Nullable<T> objeto for true, o valor do objeto poderá ser acessado com Value a 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 a HasValue propriedade for false, o valor do objeto será indefinido e uma tentativa de acessar a Value propriedade lançará 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 anulável está em caixa, o Common Language Runtime caixas automaticamente o valor subjacente do Nullable<T> objeto, não o Nullable<T> objeto em si.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 a HasValue propriedade for true Value , o conteúdo da propriedade será boxed.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 é unboxed, o common language runtime cria uma Nullable<T> nova 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 a HasValue propriedade de um tipo anulável for false, o resultado de uma operação Boxing será 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 in a box for passado para um método que espera um argumento de objeto, esse método deverá estar preparado para lidar com o nullcaso em que o argumento é.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 o é desemoldurado em um tipo anulável, o common language runtime cria Nullable<T> uma nova estrutura e HasValue inicializa sua falsepropriedade para.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.1e componentes Windows Runtimeand 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 exportada em uma biblioteca 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, não há suporte para isso.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