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 nullzugewiesen werden 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. b. String, NULL-Werte zulassen, aber alle Werttypen, z. b. Int32, sind nicht zulässig.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 deklariert int? in C# oder Integer? in Visual Basic einen ganzzahligen Werttyp, dem 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 zulassen.The Nullable<T> structure supports using only a value type as a nullable type because reference types are nullable by design.

Die Nullable-Klasse bietet ergänzende Unterstützung für die Nullable<T>-Struktur.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 die Eigenschaften HasValue und Value.The two fundamental members of the Nullable<T> structure are the HasValue and Value properties. Wenn die HasValue-Eigenschaft für ein Nullable<T> Objekt trueist, kann auf den Wert des-Objekts mit der Value-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, auf die Value-Eigenschaft zuzugreifen, löst eine InvalidOperationExceptionaus.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 automatisch den zugrunde liegenden Wert des Nullable<T> Objekts, nicht das Nullable<T> 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, wird der Inhalt der Value-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 der Common Language Runtime eine neue Nullable<T>-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 Typs, der NULL-Werte zulässt, falseist, wird das Ergebnis eines Boxing-Vorgangs null.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 nullist, wenn ein an NULL festleg barer Typ an eine Methode, die ein Objekt Argument erwartet, übermittelt wird.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 Typ, der NULL-Werte zulässt, entpackt wird, erstellt die Common Language Runtime eine neue Nullable<T> Struktur und initialisiert deren HasValue-Eigenschaft mit false.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.1 und Windows-Runtime Komponentenand Windows Runtime Components

Beginnend mit dem .NET Framework 4.5.1.NET Framework 4.5.1können Sie einen Nullable<T>-Typ als Member einer Struktur einschließen, die in einer 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