Nullable<T> Struct

Definition

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
public struct Nullable<T> where T : struct
[System.Serializable]
public struct Nullable<T> where T : struct
type Nullable<'T (requires 'T : struct)> = struct
Public Structure Nullable(Of T)

Type Parameters

T

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

Inheritance
Nullable<T>
Attributes

Examples

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.

Remarks

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, como String, são anuláveis, mas todos os tipos de valor, 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.

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? em C# ou Integer? em 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 estrutura de Nullable<T> dá suporte ao uso de apenas um tipo de valor 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 classe Nullable fornece suporte complementar para a estrutura de Nullable<T>.The Nullable class provides complementary support for the Nullable<T> structure. A classe Nullable 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 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 estrutura de Nullable<T> são as propriedades HasValue e Value.The two fundamental members of the Nullable<T> structure are the HasValue and Value properties. Se a propriedade HasValue para um objeto Nullable<T> for true, o valor do objeto poderá ser acessado com a propriedade Value.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 propriedade HasValue for false, o valor do objeto será indefinido e uma tentativa de acessar a propriedade Value lançará uma 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 objeto Nullable<T>, não o objeto Nullable<T> 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 propriedade HasValue for true, o conteúdo da propriedade Value 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 nova estrutura de Nullable<T> 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 propriedade HasValue 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 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 é desemoldurado em um tipo anulável, o Common Language Runtime cria uma nova estrutura de Nullable<T> e inicializa sua propriedade HasValue como 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.

Componentes .NET Framework 4.5.1.NET Framework 4.5.1 e Windows Runtime.NET Framework 4.5.1.NET Framework 4.5.1 and Windows Runtime Components

A partir do .NET Framework 4.5.1.NET Framework 4.5.1, você pode incluir um tipo de Nullable<T> 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.

Constructors

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.

Properties

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

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.

Methods

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()

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

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)

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()

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.

Operators

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>)

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

Applies to

See also