Nullable<T> Struktura
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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 Nullable<T> hodnoty obecného typu.
- Dědičnost
- 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é nejsou s možnou hodnotou null, a dva sloupce, které mají hodnotu null.
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.
open System
// Define the "titleAuthor" table of the Microsoft "pubs" database.
type titleAuthor =
struct
// Author ID format ###-##-####
val mutable au_id: string
// Title ID format AA####
val mutable title_id: string
// Author ORD is nullable.
val mutable au_ord: Nullable<int16>
// Royalty Percent is nullable.
val mutable royaltyper: Nullable<int>
end
// Display the values of the titleAuthor array elements.
let display dspTitle (dspAllTitleAuthors: #seq<titleAuthor>) =
printfn $"*** {dspTitle} ***"
for dspTA in dspAllTitleAuthors do
printfn $"Author ID ... {dspTA.au_id}"
printfn $"Title ID .... {dspTA.title_id}"
printfn $"Author ORD .. {dspTA.au_ord.GetValueOrDefault -1s}"
printfn $"Royalty %% ... {dspTA.royaltyper.GetValueOrDefault -1}\n"
// Declare and initialize the titleAuthor array.
let ta = Array.zeroCreate<titleAuthor> 3
ta[0].au_id <- "712-32-1176"
ta[0].title_id <- "PS3333"
ta[0].au_ord <- Nullable 1s
ta[0].royaltyper <- Nullable 100
ta[1].au_id <- "213-46-8915"
ta[1].title_id <- "BU1032"
ta[1].au_ord <- Nullable()
ta[1].royaltyper <- Nullable()
ta[2].au_id <- "672-71-3249"
ta[2].title_id <- "TC7777"
ta[2].au_ord <- Nullable()
ta[2].royaltyper <- Nullable 40
// Display the values of the titleAuthor array elements, and
// display a legend.
display "Title Authors Table" ta
printfn "Legend:"
printfn "An Author ORD of -1 means no value is defined."
printfn "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.
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
Třída Nullable představuje typ hodnoty, který lze přiřadit null.
Typ je řečeno, že má hodnotu null, pokud může být přiřazena hodnota nebo lze přiřadit null, což znamená, že typ nemá žádnou hodnotu. Ve výchozím nastavení jsou všechny odkazové typy, například String, nullable, ale všechny typy hodnot, například Int32, nejsou.
V jazyce C# a Visual Basic označíte typ hodnoty jako hodnotu null pomocí zápisu ? za typem hodnoty. Například int? v jazyce C# nebo Integer? v jazyce Visual Basic deklaruje celočíselnou hodnotu typu, který lze přiřadit null.
Struktura Nullable<T> podporuje použití pouze typu hodnoty jako typu s možnou hodnotou null, protože odkazové typy mají hodnotu nullable podle návrhu.
Třída Nullable poskytuje doplňkovou podporu struktury Nullable<T> . Třída Nullable podporuje získání základního typu typu s možnou hodnotou null a operace porovnání a rovnosti u dvojic typů s možnou hodnotou null, jejichž základní typ hodnoty nepodporuje obecné operace porovnání a rovnosti.
Základní vlastnosti
Dva základní členy Nullable<T> struktury jsou vlastnosti HasValue a Value vlastnosti. Pokud je vlastnost HasValue objektu Nullable<T>, pak lze hodnotu objektu zpřístupnit pomocí vlastnosti true.
HasValue Pokud je false vlastnost, hodnota objektu není definována a pokus o přístup k vlastnosti Value vyvolá výjimku InvalidOperationException.
Boxování a rozbalování
Když je typ s možnou hodnotou null zabalen, modul CLR (Common Language Runtime) automaticky balí podkladovou hodnotu objektu Nullable<T>, nikoli samotný objekt Nullable<T>. To znamená, že pokud je vlastnost HasValuetrue, obsah vlastnosti Value je zabalen. Pokud je podkladová hodnota typu s možnou hodnotou null rozbalována, modul CLR (Common Language Runtime) vytvoří novou Nullable<T> strukturu inicializovanou na podkladovou hodnotu.
Pokud je vlastnost typu nullable označená jako HasValuefalse, výsledek operace boxing je null. V důsledku toho, pokud boxed nullable typ je předán metodě, která očekává argument objektu, tato metoda musí být připravena zpracovat případ, kde argument je null. Pokud null je unboxed do typu nullable, common language runtime vytvoří novou Nullable<T> strukturu a inicializuje jeho HasValue vlastnost na false.
Komponenty prostředí Windows Runtime
Můžete zahrnout typ Nullable<T> jako člen struktury exportované v knihovně WinMD.
Konstruktory
| Name | Description |
|---|---|
| Nullable<T>(T) |
Inicializuje novou instanci Nullable<T> struktury na zadanou hodnotu. |
Vlastnosti
| Name | Description |
|---|---|
| HasValue |
Získá hodnotu určující, zda aktuální Nullable<T> objekt má platnou hodnotu jeho základního typu. |
| Value |
Získá hodnotu aktuálního Nullable<T> objektu, pokud byla přiřazena platnou podkladovou hodnotu. |
Metody
| Name | Description |
|---|---|
| Equals(Object) |
Určuje, zda je aktuální Nullable<T> objekt roven zadanému objektu. |
| GetHashCode() |
Načte kód hash objektu vráceného Value vlastností. |
| GetValueOrDefault() |
Načte hodnotu aktuálního Nullable<T> objektu nebo výchozí hodnotu základního typu. |
| GetValueOrDefault(T) |
Načte hodnotu aktuálního Nullable<T> objektu nebo zadanou výchozí hodnotu. |
| ToString() |
Vrátí text reprezentaci hodnoty aktuálního Nullable<T> objektu. |
Operátory
| Name | Description |
|---|---|
| Explicit(Nullable<T> to T) |
Definuje explicitní převod Nullable<T> instance na její podkladovou hodnotu. |
| Implicit(T to Nullable<T>) |
Vytvoří nový Nullable<T> objekt inicializovaný na zadanou hodnotu. |