Nullable<T> Struktura

Definice

Představuje typ hodnoty, který lze přiřadit 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)

Parametry typu

T

Základní typ Nullable<T> hodnoty obecného typuThe underlying value type of the Nullable<T> generic type.

Dědičnost
Nullable<T>
Atributy

Příklady

Následující příklad kódu definuje tři řádky tabulky v ukázkové databázi Microsoft pubs.The following code example defines three rows of a table in the Microsoft Pubs sample database. Tabulka obsahuje dva sloupce, které nemají hodnotu null a dva sloupce s možnou hodnotou null.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.

Poznámky

Typ je označován jako Nullable, pokud může mít přiřazenou hodnotu nebo může být přiřazen null, což znamená, že typ nemá žádnou hodnotu.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. Ve výchozím nastavení jsou všechny typy odkazů, například String, null, ale všechny typy hodnot, Int32například, nejsou.By default, all reference types, such as String, are nullable, but all value types, such as Int32, are not.

V C# a Visual Basic označíte typ hodnoty jako null pomocí ? notace za typ hodnoty.In C# and Visual Basic, you mark a value type as nullable by using the ? notation after the value type. Například int? C# v nebo Integer? v Visual Basic deklaruje typ celočíselné hodnoty, který lze přiřadit null.For example, int? in C# or Integer? in Visual Basic declares an integer value type that can be assigned null.

Nullable<T> Struktura podporuje použití pouze hodnotového typu jako typu s možnou hodnotou null, protože návrh odkazuje na typ s možnou hodnotou null.The Nullable<T> structure supports using only a value type as a nullable type because reference types are nullable by design.

Třída poskytuje doplňkovou podporu Nullable<T> pro strukturu. NullableThe Nullable class provides complementary support for the Nullable<T> structure. Nullable Třída podporuje získání základního typu typu s možnou hodnotou null a porovnávání a operace rovnosti na páry typů s možnou hodnotou null, jejichž základní typ hodnoty nepodporuje obecné porovnání a operace rovnosti.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.

Základní vlastnostiFundamental Properties

Mezi Nullable<T> dva základní členy struktury HasValue patří vlastnosti a Value .The two fundamental members of the Nullable<T> structure are the HasValue and Value properties. Nullable<T> Value Je-li HasValuevlastnost objektutypu,lzekhodnotětrueobjektu přejít pomocí vlastnosti.If the HasValue property for a Nullable<T> object is true, the value of the object can be accessed with the Value property. Value Pokud je HasValue vlastnost, hodnota objektu není definována a pokus o InvalidOperationExceptionpřístup k vlastnosti vyvolá. falseIf the HasValue property is false, the value of the object is undefined and an attempt to access the Value property throws an InvalidOperationException.

Zabalení a rozbaleníBoxing and Unboxing

Pokud je typ s povolenou hodnotou null, modul CLR (Common Language Runtime) automaticky Nullable<T> Nullable<T> vypíše podkladovou hodnotu objektu, nikoli samotného objektu.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. To znamená, že pokud HasValue je truevlastnost Value , obsah vlastnosti je zabalený.That is, if the HasValue property is true, the contents of the Value property is boxed. Pokud je podkladová hodnota typu s možnou hodnotou null nezabalená, modul CLR ( Nullable<T> Common Language Runtime) vytvoří novou strukturu inicializovaná na podkladovou hodnotu.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.

Pokud je HasValue falsevlastnost typu s možnou hodnotou null, je výsledkem operace nullzabalení.If the HasValue property of a nullable type is false, the result of a boxing operation is null. V důsledku toho, pokud je zabalený typ s možnou hodnotou null předán metodě, která očekává argument objektu, musí být tato metoda připravená na zpracování případu null, kde je argument.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. Když null je v nezabalený typ s možnou hodnotou null, modul common language Nullable<T> runtime vytvoří novou strukturu HasValue a inicializuje falsejejí vlastnost na.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.1a prostředí Windows Runtime komponentyand Windows Runtime Components

Počínaje verzí můžete Nullable<T> zahrnout typ jako člena struktury exportované v knihovně winmd. .NET Framework 4.5.1.NET Framework 4.5.1Starting 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. Dřív to nepodporovalo.Previously, this was not supported.

Konstruktory

Nullable<T>(T)

Inicializuje novou instanci Nullable<T> struktury na určenou hodnotu.Initializes a new instance of the Nullable<T> structure to the specified value.

Vlastnosti

HasValue

Získá hodnotu, která označuje, zda Nullable<T> má aktuální objekt platnou hodnotu svého nadřízeného typu.Gets a value indicating whether the current Nullable<T> object has a valid value of its underlying type.

Value

Získá hodnotu aktuálního Nullable<T> objektu, pokud byla přiřazena platná základní hodnota.Gets the value of the current Nullable<T> object if it has been assigned a valid underlying value.

Metody

Equals(Object)

Označuje, zda je Nullable<T> aktuální objekt roven zadanému objektu.Indicates whether the current Nullable<T> object is equal to a specified object.

GetHashCode()

Načte hodnotu hash objektu vráceného Value vlastností.Retrieves the hash code of the object returned by the Value property.

GetValueOrDefault()

Načte hodnotu aktuálního Nullable<T> objektu nebo výchozí hodnotu základního typu.Retrieves the value of the current Nullable<T> object, or the default value of the underlying type.

GetValueOrDefault(T)

Načte hodnotu aktuálního Nullable<T> objektu nebo zadanou výchozí hodnotu.Retrieves the value of the current Nullable<T> object, or the specified default value.

ToString()

Vrátí textovou reprezentaci hodnoty aktuálního Nullable<T> objektu.Returns the text representation of the value of the current Nullable<T> object.

Operátory

Explicit(Nullable<T> to T)

Definuje explicitní převod Nullable<T> instance na podkladovou hodnotu.Defines an explicit conversion of a Nullable<T> instance to its underlying value.

Implicit(T to Nullable<T>)

Vytvoří nový Nullable<T> objekt inicializovaný na zadanou hodnotu.Creates a new Nullable<T> object initialized to a specified value.

Platí pro

Viz také