Auf NULL festlegbare Werttypen
Aktualisiert: November 2007
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 Wert- und Verweistypen.
Verwenden einer Variablen mit auf NULL festlegbarem Typ
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 HasValueTrue ist, können Sie den Wert von Value lesen. Beachten Sie, dass sowohl HasValue als auch ValueReadOnly-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
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
Vergleichen von auf NULL festlegbaren Typen
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.
b1 |
b2 |
b1 AND b2 |
b1 OR b2 |
---|---|---|---|
Nothing |
Nothing |
Nothing |
Nothing |
Nothing |
True |
Nothing |
True |
Nothing |
False |
False |
Nothing |
True |
Nothing |
Nothing |
True |
True |
True |
True |
True |
True |
False |
False |
True |
False |
Nothing |
False |
Nothing |
False |
True |
False |
True |
False |
False |
False |
False |
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
Hinweis: |
---|
AndAlso und OrElse verwenden eine Kurzschlussauswertung und müssen ihren jeweils zweiten Operanden auswerten, wenn der erste Nothing ergibt. |
Weitergabe
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)
Verwenden von auf NULL festlegbaren Typen mit Daten
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.
Siehe auch
Aufgaben
Problembehandlung bei Datentypen