Nullable Value Types (Visual Basic)

 

Die neueste Dokumentation zu Visual Studio 2017 RC finden Sie unter Visual Studio 2017 RC Documentation (Dokumentation zu Visual Studio 2017 RC).

Zuweilen arbeiten Sie mit einem Werttyp, für den unter bestimmten Umständen kein Wert definiert ist. Zum Beispiel muss für ein Feld in einer Datenbank möglicherweise unterschieden werden, ob ihm ein Wert zugewiesen ist, der eine Bedeutung hat, oder ob ihm kein Wert zugewiesen ist. Werttypen können auf ihre normalen Werte oder einen NULL-Wert erweitert werden. Eine solche Erweiterung wird als auf NULL festlegbarer Typ bezeichnet.

Jeder auf NULL festlegbare Typ wird anhand der generischen Nullable<T>-Struktur erstellt. Angenommen, eine Datenbank verfolgt arbeitsbezogene Aktivitäten nach. Im folgenden Beispiel wird ein auf NULL festlegbarer Boolean-Typ erstellt und eine Variable von diesem Typ deklariert. Sie können die Deklaration auf drei Arten schreiben:

        Dim ridesBusToWork1? As Boolean
        Dim ridesBusToWork2 As Boolean?
        Dim ridesBusToWork3 As Nullable(Of Boolean)

Die Variable ridesBusToWork kann den Wert True, den Wert False oder keinen Wert annehmen. Ihr standardmäßiger Anfangswert ist kein Wert, was in diesem Fall bedeuten kann, dass die Informationen über diese Person noch nicht abgerufen wurden. False hingegen kann bedeuten, dass die Informationen abgerufen wurden und die Person nicht mit dem Bus zur Arbeit kommt.

Sie können Variablen und Eigenschaft mit auf NULL festlegbaren Typen deklarieren, und Sie können ein Array mit Elementen eines auf NULL festlegbaren Typs deklarieren. Sie können Prozeduren mit auf NULL festlegbaren Typen als Parameter deklarieren, und Sie können mit der Function-Prozedur einen auf NULL festlegbaren Typ zurückgeben.

Sie können keinen auf NULL festlegbaren Typ für einen Referenztyp, z. B. ein Array, einen String oder eine Klasse, erstellen. Der zugrunde liegende Typ muss ein Werttyp sein. Weitere Informationen finden Sie unter Value Types and Reference Types.

Die wichtigsten Member eines auf NULL festlegbaren Typs sind seine HasValue-Eigenschaft und seine Value-Eigenschaft. Bei einer Variablen mit auf NULL festlegbarem Typ können Sie mit HasValue bestimmen, ob die Variable einen definierten Wert enthält. Wenn HasValue True ist, können Sie den Wert von Value lesen. Beachten Sie, dass sowohl HasValue als auch Value ReadOnly-Eigenschaften sind.

Standardwerte

Wenn Sie eine Variable mit auf NULL festlegbarem Typ deklarieren, ist der Standardwert ihrer HasValue-Eigenschaft False. Dies bedeutet, dass die Variable statt des Standardwerts des ihr zugrunde liegenden Werttyps standardmäßig keinen definierten Wert aufweist. Im folgenden Beispiel verfügt die Variable numberOfChildren ursprünglich über keinen definierten Wert, obwohl der Standardwert des Integer-Typs 0 ist.

        Dim numberOfChildren? As Integer

Ein NULL-Wert empfiehlt sich, um einen undefinierten oder unbekannten Wert anzugeben. Wenn numberOfChildren als Integer deklariert wurde, ist kein Wert vorhanden, um anzugeben, dass die Informationen gegenwärtig nicht verfügbar sind.

Speichern von Werten

Ein Wert wird in einer Variablen oder Eigenschaft eines auf NULL festlegbaren Typs auf die übliche Weise gespeichert. Im folgenden Beispiel wird der im vorherigen Beispiel deklarierten Variablen numberOfChildren ein Wert zugewiesen.

        numberOfChildren = 2

Wenn eine Variable oder Eigenschaft mit auf NULL festlegbarem Typ einen definierten Wert enthält, können Sie veranlassen, dass sie in ihren ursprünglichen Zustand zurückkehrt, in dem kein Wert zugewiesen war. Hierzu legen Sie die Variable oder Eigenschaft auf Nothing fest, wie im folgenden Beispiel veranschaulicht.

        numberOfChildren = Nothing

System_CAPS_ICON_note.jpg Hinweis

Obwohl Sie einer Variablen eines auf NULL festlegbaren Typs Nothing zuweisen können, ist es nicht möglich, diese mittels Gleichheitszeichen auf Nothing zu überprüfen. Der Vergleich mithilfe des Gleichheitszeichens, someVar = Nothing, ergibt immer Nothing. Sie können die HasValue-Eigenschaft der Variablen auf False überprüfen oder eine Überprüfung mithilfe des Operators Is oder IsNot vornehmen.

Abrufen von Werten

Um den Wert einer Variablen mit auf NULL festlegbarem Typ abzurufen, überprüfen Sie zunächst ihre HasValue-Eigenschaft, um sicherzustellen, dass sie einen Wert aufweist. Wenn Sie versuchen, den Wert zu lesen, und HasValue ist False, wird von Visual Basic eine InvalidOperationException-Ausnahme ausgelöst. Im folgenden Beispiel wird die empfohlene Vorgehensweise zum Lesen der Variablen numberOfChildren aus den vorhergehenden Beispielen veranschaulicht.

        If numberOfChildren.HasValue Then
            MsgBox("There are " & CStr(numberOfChildren) & " children.")
        Else
            MsgBox("It is not known how many children there are.")
        End If

Wenn Boolean-Variablen, die NULL-Werte zulassen, in booleschen Ausdrücken verwendet werden, kann das Ergebnis True, False oder Nothing sein. Im Folgenden ist die Wahrheitstabelle für And und Or aufgeführt. Da b1 und b2 nun über drei mögliche Werte verfügen, sind neun Kombinationen auszuwerten.

b1b2b1 AND b2b1 OR b2
NothingNothingNothingNothing
NothingTrueNothingTrue
NothingFalseFalseNothing
TrueNothingNothingTrue
TrueTrueTrueTrue
TrueFalseFalseTrue
FalseNothingFalseNothing
FalseTrueFalseTrue
FalseFalseFalseFalse

Ist der Wert von booleschen Variablen oder Ausdrücken Nothing, ist er weder true noch false. Betrachten Sie das folgende Beispiel.

        Dim b1? As Boolean
        Dim b2? As Boolean
        b1 = True
        b2 = Nothing

        ' The following If statement displays "Expression is not true".
        If (b1 And b2) Then
            Console.WriteLine("Expression is true")
        Else
            Console.WriteLine("Expression is not true")
        End If

        ' The following If statement displays "Expression is not false".
        If Not (b1 And b2) Then
            Console.WriteLine("Expression is false")
        Else
            Console.WriteLine("Expression is not false")
        End If

In diesem Beispiel ergibt b1 And b2 den Wert Nothing. Daraus ergibt sich, dass die Else-Klausel in jeder If-Anweisung ausgeführt wird und die Ausgabe wie folgt lautet:

Expression is not true

Expression is not false

System_CAPS_ICON_note.jpg Hinweis

AndAlso und OrElse verwenden eine Kurzschlussauswertung und müssen ihren jeweils zweiten Operanden auswerten, wenn der erste Nothing ergibt.

Wenn mindestens einer der beiden Operanden einer Vergleichs-, Schiebe-, Typ- oder arithmetischen Operation auf NULL festgelegt werden kann, lässt auch das Ergebnis der Operation NULL-Werte zu. Wenn beide Operanden andere Werte als Nothing haben, wird die Operation für die zugrunde liegenden Werte der Operanden durchgeführt, als ob keiner der beiden ein Typ wäre, der NULL-Werte zulässt. Im folgenden Beispiel werden die Variablen compare1 und sum1 implizit typisiert. Wenn Sie mit der Maus darauf zeigen, sehen Sie, dass der Compiler für beide Typen ableitet, die NULL-Werte zulassen.

        ' Variable n is a nullable type, but both m and n have proper values.
        Dim m As Integer = 3
        Dim n? As Integer = 2

        ' The comparison evaluated is 3>2, but compare1 is inferred to be of 
        ' type Boolean?.
        Dim compare1 = m > n
        ' The values summed are 3 and 2, but sum1 is inferred to be of type Integer?.
        Dim sum1 = m + n

        ' The following line displays: 3 * 2 * 5 * True
        Console.WriteLine(m & " * " & n & " * " & sum1 & " * " & compare1)

Wenn mindestens einer der beiden Operanden den Wert Nothing hat, ist das Ergebnis Nothing.

        ' Change the value of n to Nothing.
        n = Nothing

        Dim compare2 = m > n
        Dim sum2 = m + n

        ' Because the values of n, compare2, and sum2 are all Nothing, the
        ' following line displays 3 * * *
        Console.WriteLine(m & " * " & n & " * " & sum2 & " * " & compare2)

Eine Datenbank ist eine der wichtigsten Anwendungsmöglichkeiten für auf NULL festlegbare Typen. Nicht alle Datenbankobjekte unterstützen gegenwärtig auf NULL festlegbare Typen, doch werden sie von den Designer-generierten Tabellenadaptern unterstützt. Siehe "TableAdapter-Unterstützung für Typen mit NULL-Wert" in Übersicht über TableAdapters.

InvalidOperationException
HasValue
Verwenden von auf NULL festlegbaren Typen
Datentypen
Value Types and Reference Types
Troubleshooting Data Types
Übersicht über TableAdapters
If Operator
Local Type Inference
Is Operator
IsNot Operator

Anzeigen: