Nullable<T> Struktur

Definition

Stellt einen Werttyp dar, der null zugewiesen werden kann.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)

Typparameter

T

Der zugrunde liegende Werttyp des generischen Nullable<T>-Typs.The underlying value type of the Nullable<T> generic type.

Vererbung
Nullable<T>
Attribute

Beispiele

Im folgenden Codebeispiel werden drei Zeilen einer Tabelle in der Beispieldatenbank Microsoft Pubs definiert.The following code example defines three rows of a table in the Microsoft Pubs sample database. Die Tabelle enthält zwei Spalten, die keine NULL-Werte zulassen, und zwei Spalten, die NULL-Werte zulassen.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.

Hinweise

Ein Typ wird als nullfähig bezeichnet, wenn ihm ein Wert zugewiesen werden kann oder zugewiesen nullwerden kann. Dies bedeutet, dass der Typ keinerlei Wert hat.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. Standardmäßig können alle Verweis Typen, z String. b., NULL-Werte zulassen, aber alle Werttypen, Int32wie z. b., sind nicht.By default, all reference types, such as String, are nullable, but all value types, such as Int32, are not.

In C# und Visual Basic markieren Sie einen Werttyp als NULL-Werte, indem ? Sie die Notation nach dem Werttyp verwenden.In C# and Visual Basic, you mark a value type as nullable by using the ? notation after the value type. Beispielsweise int? deklariert in C# oder Integer? in Visual Basic einen ganzzahligen Werttyp, der nullzugewiesen werden kann.For example, int? in C# or Integer? in Visual Basic declares an integer value type that can be assigned null.

Die Nullable<T> -Struktur unterstützt die Verwendung eines Werttyps als Typ, der NULL-Werte zulässt, da Verweis Typen Entwurfs bedingt NULL-Werte zulassenThe Nullable<T> structure supports using only a value type as a nullable type because reference types are nullable by design.

Die Nullable -Klasse stellt eine ergänzende unter Nullable<T> Stützung für die-Struktur bereit.The Nullable class provides complementary support for the Nullable<T> structure. Die Nullable -Klasse unterstützt das Abrufen des zugrunde liegenden Typs eines Typs, der NULL-Werte zulässt, sowie Vergleichs-und Gleichheits Operationen für Paare von Typen, die NULL-Werte zulassen, deren zugrunde liegender Werttyp keine generischen VergleicheThe 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.

Grundlegende EigenschaftenFundamental Properties

Die beiden grundlegenden Elemente der Nullable<T> -Struktur sind HasValue die Value -Eigenschaft und die-Eigenschaft.The two fundamental members of the Nullable<T> structure are the HasValue and Value properties. Wenn die HasValue -Eigenschaft für Nullable<T> ein- trueObjekt ist, kann auf den Wert des-Objekts mit Value der-Eigenschaft zugegriffen werden.If the HasValue property for a Nullable<T> object is true, the value of the object can be accessed with the Value property. Wenn die HasValue -Eigenschaft falseist, ist der Wert des-Objekts nicht definiert, und ein Versuch Value , auf die InvalidOperationException-Eigenschaft zuzugreifen, löst eine aus.If the HasValue property is false, the value of the object is undefined and an attempt to access the Value property throws an InvalidOperationException.

Boxing und UnboxingBoxing and Unboxing

Wenn ein Typ, der NULL-Werte zulässt, gekapselt ist, wird der Common Language Runtime Nullable<T> automatisch den zugrunde liegenden Nullable<T> Wert des Objekts, nicht das Objekt selbst.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. Das heißt, wenn die HasValue -Eigenschaft trueist Value , wird der Inhalt der-Eigenschaft geachtelt.That is, if the HasValue property is true, the contents of the Value property is boxed. Wenn der zugrunde liegende Wert eines Typs, der NULL-Werte zulässt, Unboxing ist, erstellt Nullable<T> der Common Language Runtime eine neue-Struktur, die mit dem zugrunde liegenden Wert initialisiert wird.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.

Wenn die HasValue -Eigenschaft eines falseTyps, der NULL-Werte zulässt, den Wert hat, nullist das Ergebnis eines Boxing-Vorgangs.If the HasValue property of a nullable type is false, the result of a boxing operation is null. Folglich muss diese Methode darauf vorbereitet sein, den Fall zu behandeln, in dem das Argument ist null, wenn ein an NULL festleg barer Typ an eine Methode übermittelt wird, die ein Objekt Argument erwartet.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. Wenn null in einen Werte zulässt-Typ umgewandelt wird, erstellt der Common Language Runtime eine neue Nullable<T> -Struktur und initialisiert seine HasValue -Eigenschaft falsemit.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.1und Windows-Runtime Komponentenand Windows Runtime Components

Beginnend mit .NET Framework 4.5.1.NET Framework 4.5.1können Sie einen Nullable<T> Typ als Member einer Struktur einschließen, die in eine winmd-Bibliothek exportiert wurde.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. Zuvor wurde dies nicht unterstützt.Previously, this was not supported.

Konstruktoren

Nullable<T>(T)

Initialisiert eine neue Instanz der Nullable<T>-Struktur mit dem angegebenen Wert.Initializes a new instance of the Nullable<T> structure to the specified value.

Eigenschaften

HasValue

Ruft einen Wert ab, der angibt, ob das aktuelle Nullable<T>-Objekt einen gültigen Wert des zugrunde liegenden Typs hat.Gets a value indicating whether the current Nullable<T> object has a valid value of its underlying type.

Value

Ruft den Wert des aktuellen Nullable<T>-Objekts ab, wenn ihm ein gültiger zugrunde liegender Wert zugewiesen wurde.Gets the value of the current Nullable<T> object if it has been assigned a valid underlying value.

Methoden

Equals(Object)

Gibt an, ob das aktuelle Nullable<T>-Objekt einem angegebenen Objekt entspricht.Indicates whether the current Nullable<T> object is equal to a specified object.

GetHashCode()

Ruft den Hashcode des Objekts ab, das von der Value-Eigenschaft zurückgegeben wird.Retrieves the hash code of the object returned by the Value property.

GetValueOrDefault()

Ruft den Wert des aktuellen Nullable<T>-Objekts oder den Standardwert des zugrunde liegenden Typs ab.Retrieves the value of the current Nullable<T> object, or the default value of the underlying type.

GetValueOrDefault(T)

Ruft den Wert des aktuellen Nullable<T>-Objekts oder den angegebenen Standardwert ab.Retrieves the value of the current Nullable<T> object, or the specified default value.

ToString()

Gibt die Textdarstellung des Werts des aktuellen Nullable<T>-Objekts zurück.Returns the text representation of the value of the current Nullable<T> object.

Operatoren

Explicit(Nullable<T> to T)

Definiert eine explizite Konvertierung einer Nullable<T>-Instanz in den zugrunde liegenden Wert.Defines an explicit conversion of a Nullable<T> instance to its underlying value.

Implicit(T to Nullable<T>)

Erstellt ein neues Nullable<T>-Objekt, das mit einem angegebenen Wert initialisiert wurde.Creates a new Nullable<T> object initialized to a specified value.

Gilt für:

Siehe auch