Nullable<T> Struct

Definitie

Vertegenwoordigt een waardetype dat kan worden toegewezen 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)

Type parameters

T

Het onderliggende waardetype van het Nullable<T> algemene type.

Overname
Nullable<T>
Kenmerken

Voorbeelden

In het volgende codevoorbeeld worden drie rijen van een tabel in de voorbeelddatabase Microsoft Pubs gedefinieerd. De tabel bevat twee kolommen die niet nullable zijn en twee kolommen die nullable zijn.

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.

Opmerkingen

De Nullable klasse vertegenwoordigt een waardetype dat kan worden toegewezen null.

Een type wordt geacht nullable te zijn als deze een waarde kan worden toegewezen of kan worden toegewezen null, wat betekent dat het type geen enkele waarde heeft. Standaard zijn alle verwijzingstypen, zoals String, nullable, maar alle waardetypen, zoals Int32, zijn dat niet.

In C# en Visual Basic markeert u een waardetype als nullable met behulp van de ? notatie na het waardetype. Bijvoorbeeld, int? in C# of Integer? in Visual Basic declareert een integerwaardetype dat kan worden toegewezen met null.

De Nullable<T> structuur staat toe dat alleen een waardetype als een nullable type wordt gebruikt, omdat referentietypen van nature nullable zijn.

De Nullable klasse biedt aanvullende ondersteuning voor de Nullable<T> structuur. De Nullable klasse ondersteunt het verkrijgen van het onderliggende type van een null-type en vergelijkings- en gelijkheidsbewerkingen op paren van null-typen waarvan het onderliggende waardetype geen algemene vergelijkings- en gelijkheidsbewerkingen ondersteunt.

Fundamentele eigenschappen

De twee fundamentele leden van de Nullable<T> structuur zijn de HasValue en Value eigenschappen. Als de HasValue eigenschap voor een Nullable<T> object is true, kan de waarde van het object worden geopend met de Value eigenschap. Als de HasValue eigenschap false is, is de waarde van het object ongedefinieerd en leidt een poging om toegang te krijgen tot de Value eigenschap tot een InvalidOperationException.

Verpakken en uitpakken

Wanneer een nullable type wordt ge-boxed, wordt in de common language runtime automatisch de onderliggende waarde van het Nullable<T> object ge-boxed, niet het Nullable<T> object zelf. Als de HasValue eigenschap true is, wordt de inhoud van de Value eigenschap in een vak geplaatst. Wanneer de onderliggende waarde van een nullable type wordt uit de box gehaald, maakt de algemene taalruntime een nieuwe Nullable<T> structuur die is geïnitialiseerd met de onderliggende waarde.

Als de HasValue eigenschap van een aanpasbaar type nullwaarde is, is het resultaat van een boksbewerking falsenull. Als een ingepakte nullwaarde type wordt doorgegeven aan een methode die een objectargument verwacht, moet die methode voorbereid zijn om de situatie af te handelen waarin het argument null is. Wanneer null wordt uitgepakt naar een nullbaar type, creëert de Common Language Runtime een nieuwe Nullable<T>-structuur en initialiseert deze de eigenschap HasValue tot false.

Windows Runtime-onderdelen

U kunt een Nullable<T> type opnemen als lid van een structuur die wordt geëxporteerd in een WinMD-bibliotheek.

Constructors

Name Description
Nullable<T>(T)

Initialiseert een nieuw exemplaar van de Nullable<T> structuur naar de opgegeven waarde.

Eigenschappen

Name Description
HasValue

Hiermee wordt een waarde opgehaald die aangeeft of het huidige Nullable<T> object een geldige waarde van het onderliggende type heeft.

Value

Hiermee wordt de waarde van het huidige Nullable<T> object opgehaald als er een geldige onderliggende waarde aan het object is toegewezen.

Methoden

Name Description
Equals(Object)

Geeft aan of het huidige Nullable<T> object gelijk is aan een opgegeven object.

GetHashCode()

Haalt de hashcode op van het object dat door de Value eigenschap wordt geretourneerd.

GetValueOrDefault()

Haalt de waarde van het huidige Nullable<T> object of de standaardwaarde van het onderliggende type op.

GetValueOrDefault(T)

Haalt de waarde van het huidige Nullable<T> object of de opgegeven standaardwaarde op.

ToString()

Retourneert de tekstweergave van de waarde van het huidige Nullable<T> object.

Operators

Name Description
Explicit(Nullable<T> to T)

Definieert een expliciete conversie van een Nullable<T> exemplaar naar de onderliggende waarde.

Implicit(T to Nullable<T>)

Hiermee maakt u een nieuw Nullable<T> object dat is geïnitialiseerd op een opgegeven waarde.

Van toepassing op

Zie ook