Typen, die NULL-Werte zulassen (C#-Programmierhandbuch)

Typen, die NULL-Werte zulassen, sind Instanzen der Nullable-Struktur. Ein Typ, der NULL-Werte zulässt, kann für seinen zugrunde liegenden Werttyp den korrekten Wertebereich darstellen, darüber hinaus aber auch einen zusätzlichen null-Wert. Einem Typ Nullable<Int32>, gesprochen "Nullable of Int32", kann z. B. jeder Wert im Bereich von -2147483648 bis 2147483647 oder der null-Wert zugewiesen werden. Einem Nullable<bool>-Typ können die Werte true, false oder null zugewiesen werden. Die Möglichkeit, numerischen und booleschen Typen null-Werte zuzuweisen, ist besonders hilfreich beim Umgang mit Datenbanken und anderen Datentypen, die Elemente enthalten, denen unter Umständen kein Wert zugewiesen werden kann. Ein boolesches Feld in einer Datenbank kann z. B. die Werte true oder false speichern, oder es wird nicht definiert.

class NullableExample
{
    static void Main()
    {
        int? num = null;

        // Is the HasValue property true? 
        if (num.HasValue)
        {
            System.Console.WriteLine("num = " + num.Value);
        }
        else
        {
            System.Console.WriteLine("num = Null");
        }

        // y is set to zero 
        int y = num.GetValueOrDefault();

        // num.Value throws an InvalidOperationException if num.HasValue is false 
        try
        {
            y = num.Value;
        }
        catch (System.InvalidOperationException e)
        {
            System.Console.WriteLine(e.Message);
        }
    }
}

Im Beispiel wird die Ausgabe angezeigt:

num = Null

Nullable object must have a value.

Weitere Beispiele finden Sie unter Verwenden von auf NULL festlegbaren Typen (C# Programmierhandbuch).

Übersicht über Typen, die NULL-Werte zulassen

Typen, die NULL-Werte zulassen, weisen die folgenden Eigenschaften auf:

  • Typen, die NULL-Werte zulassen, stellen Werttypvariablen dar, denen der Wert null zugewiesen werden kann. Sie können keinen auf einem Referenztyp basierenden Typ erstellen, der NULL-Werte zulässt. (Referenztypen unterstützen bereits den null-Wert.)

  • Die Syntax T? ist die Kurzform für Nullable, wobei T ein Werttyp ist. Diese beiden Formen sind austauschbar.

  • Die Zuweisung eines Werts zu einem Typ, der NULL-Werte zulässt, erfolgt auf die gleiche Art und Weise wie bei regulären Werttypen, z. B. int? x = 10; oder double? d = 4.108. Einem Typ, der NULL-Werte zulässt, kann auch folgender Wert zugewiesen werden: null: int? x = null.

  • Verwenden Sie die Nullable.GetValueOrDefault-Methode, um den zugewiesenen Wert oder den Standardwert für den zugrunde liegenden Typ zurückzugeben, wenn der Wert null ist, z. B. int j = x.GetValueOrDefault();.

  • Verwenden Sie die schreibgeschützten Eigenschaften HasValue und Value, um den Wert auf NULL zu testen und ihn abzurufen, wie im folgenden Beispiel gezeigt: if(x.HasValue) j = x.Value;.

    • Die HasValue-Eigenschaft gibt true zurück, wenn die Variable einen Wert enthält, oder false, wenn sie null ist.

    • Die Value-Eigenschaft gibt einen Wert zurück, sofern ein Wert zugewiesen ist. Andernfalls wird eine InvalidOperationException ausgelöst.

    • Der Standardwert für HasValue lautet false. Die Value-Eigenschaft verfügt über keinen Standardwert.

    • Sie können auch die Operatoren != und == mit einem Nullable-Typ verwenden, wie im folgenden Beispiel gezeigt: if (x != null) y = x;.

  • Verwenden Sie den Operator ?? zum Zuweisen eines Standardwerts, der angewendet wird, wenn ein Typ, der null-Werte zulässt und dessen aktueller Wert NULL ist, einem Typ zugewiesen wird, der keine NULL-Werte zulässt, z. B. int? x = null; int y = x ?? -1;.

  • Geschachtelte Typen, die NULL-Werte zulassen, sind nicht zulässig. Die folgende Zeile wird nicht kompiliert: Nullable<Nullable<int>> n;

Verwandte Abschnitte

Weitere Informationen:

C#-Programmiersprachenspezifikation

Weitere Informationen erhalten Sie unter C#-Sprachspezifikation. Die Sprachspezifikation ist die verbindliche Quelle für die Syntax und Verwendung von C#.

Siehe auch

Referenz

Nullable

Konzepte

C#-Programmierhandbuch

Weitere Ressourcen

Visual C#

C#-Referenz

Was geschieht genau "transformierter" Durchschnitt?