Nullable<T> Struktura

Definice

Představuje typ hodnoty, který lze přiřadit 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
[<System.Serializable>]
type Nullable<'T (requires 'T : struct)> = struct
Public Structure Nullable(Of T)

Parametry typu

T

Základní typ hodnoty obecného Nullable<T> typu.

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. Tabulka obsahuje dva sloupce, které nelze null, a dva sloupce s možnou hodnotou null.

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

O typu se říká, že může mít hodnotu null, pokud se jí může přiřadit hodnota nebo může být přiřazena , což znamená, že typ nemá vůbec null žádnou hodnotu. Ve výchozím nastavení jsou všechny odkazové typy, například , s možnou hodnotou null, ale všechny typy hodnot, jako String Int32 například , nejsou.

V jazyce C# a Visual Basic můžete označit typ hodnoty jako nullable pomocí ? notace za typem hodnoty. Například v int? jazyce C# Integer? nebo v Visual Basic deklaruje celočíselný typ hodnoty, který lze přiřadit null .

Struktura podporuje použití pouze hodnotového typu jako typu s možnou hodnotou null, protože odkazové typy jsou z návrhu Nullable<T> s možnou hodnotou null.

Třída Nullable poskytuje doplňkovou podporu pro Nullable<T> strukturu. Třída podporuje získání základního typu typu s možnou hodnotou null a operace porovnání a rovnosti u párů typů s možnou hodnotou null, jejichž základní typ hodnoty nepodporuje obecné operace porovnání Nullable a rovnosti.

Základní vlastnosti

Dva základní členy Nullable<T> struktury jsou HasValue vlastnosti Value a . Pokud je vlastnost objektu , je hodnota objektu HasValue Nullable<T> true přístupná pomocí Value vlastnosti . Pokud je vlastnost , hodnota objektu není definována a pokus o přístup k vlastnosti vyvolá HasValue false Value InvalidOperationException .

Zabalení a rozbalení

Pokud je typ s možnou hodnotou null zamykaný, modul CLR (Common Language Runtime) automaticky vytvoří pole podkladové hodnoty objektu, nikoli Nullable<T> Nullable<T> samotného objektu. To znamená, že HasValue pokud je vlastnost , obsah vlastnosti je v true Value rámečku. Pokud je podkladová hodnota typu s možnou hodnotou null bez pole, modul CLR (Common Language Runtime) vytvoří novou strukturu inicializované pro Nullable<T> podkladovou hodnotu.

Pokud HasValue je vlastnost typu s možnou hodnotou null , výsledkem operace false balení je null . V důsledku toho, pokud je typ s možnou hodnotou null v rámečku předán metodě, která očekává argument objektu, musí být tato metoda připravena na zpracování případu, kdy je argument null . Pokud null je modul CLR (Common Language Runtime) rozbalený do typu s možnou hodnotou null, vytvoří novou strukturu a inicializuje svou vlastnost na Nullable<T> HasValue false .

.NET Framework 4.5.1 a Windows Runtime

Počínaje .NET Framework 4.5.1 můžete zahrnout typ jako člena struktury exportované do Nullable<T> knihovny WinMD. Dříve se tato funkce nepodporuje.

Konstruktory

Nullable<T>(T)

Inicializuje novou instanci Nullable<T> struktury na zadanou hodnotu.

Vlastnosti

HasValue

Získá hodnotu určující, zda má aktuální Nullable<T> objekt platnou hodnotu svého základního typu.

Value

Získá hodnotu aktuálního Nullable<T> objektu, pokud byla přiřazena platná podkladová hodnota.

Metody

Equals(Object)

Určuje, jestli se Nullable<T> aktuální objekt rovná zadanému objektu.

GetHashCode()

Načte kód hash objektu vráceného Value vlastností .

GetValueOrDefault()

Načte hodnotu aktuálního objektu Nullable<T> nebo výchozí hodnotu základního typu.

GetValueOrDefault(T)

Načte hodnotu aktuálního objektu Nullable<T> nebo zadanou výchozí hodnotu.

ToString()

Vrátí textovou reprezentaci hodnoty aktuálního Nullable<T> objektu.

Operátory

Explicit(Nullable<T> to T)

Definuje explicitní převod instance na Nullable<T> její podkladovou hodnotu.

Implicit(T to Nullable<T>)

Vytvoří nový Nullable<T> objekt inicializované na zadanou hodnotu.

Platí pro

Viz také