Nothing-Schlüsselwort [Visual Basic]
Stellt den Standardwert jedes Datentyps dar. Bei Verweistypen ist der Standardwert der null
Verweis. Bei Werttypen hängt der Standardwert davon ab, ob der Werttyp NULLable ist.
Hinweis
Bei Werttypen, die nicht nullable sind, Nothing
unterscheidet sich Visual Basic von C null
#. Wenn Sie in Visual Basic eine Variable eines Werttyps ohne Nullable auf Nothing
festlegen, wird die Variable auf den Standardwert für ihren deklarierten Typ festgelegt. Wenn Sie in C# eine Variable eines Werttyps ohne Nullable zuweisen, null
tritt ein Kompilierzeitfehler auf.
Bemerkungen
Nothing
stellt den Standardwert jedes Datentyps dar. Der Standardwert hängt davon ab, ob die Variable einen Werttyp oder einen Verweistyp aufweist.
Eine Variable eines Werttyps enthält ihre Daten direkt. Werttypen umfassen alle numerischen Datentypen, Boolean
, Char
, Date
alle Strukturen und alle Enumerationen. Eine Variable eines Verweistyps speichert einen Verweis auf eine instance des Objekts im Arbeitsspeicher. Zu den Verweistypen gehören Arrays, Klassen, Delegate und Zeichenfolgen. Weitere Informationen finden Sie unter Value Types and Reference Types.
Wenn eine Variable vom Werttyp ist, hängt das Verhalten von Nothing
davon ab, ob die Variable einen Nullable-Datentyp aufweist. Um einen Nullable-Werttyp darzustellen, fügen Sie dem Typnamen einen ?
Modifizierer hinzu. Durch Nothing
Zuweisen zu einer NULLable-Variablen wird der Wert auf null
festgelegt. Weitere Informationen finden Sie unter Nullable-Werttypen.
Wenn eine Variable einen Werttyp aufweist, der nicht NULL-Wert ist, wird sie durch Zuweisen Nothing
auf den Standardwert für ihren deklarierten Typ festgelegt. Wenn dieser Typ Variablenmember enthält, werden alle auf ihre Standardwerte festgelegt. Das folgende Beispiel veranschaulicht dies für skalare Typen.
Module Module1
Sub Main()
Dim ts As TestStruct
Dim i As Integer
Dim b As Boolean
' The following statement sets ts.Name to null and ts.Number to 0.
ts = Nothing
' The following statements set i to 0 and b to False.
i = Nothing
b = Nothing
Console.WriteLine($"ts.Name: {ts.Name}")
Console.WriteLine($"ts.Number: {ts.Number}")
Console.WriteLine($"i: {i}")
Console.WriteLine($"b: {b}")
Console.ReadKey()
End Sub
Public Structure TestStruct
Public Name As String
Public Number As Integer
End Structure
End Module
Wenn eine Variable einen Verweistyp aufweist, wird sie durch Zuweisen Nothing
der Variablen auf einen null
Verweis des Variablentyps festgelegt. Eine Variable, die auf einen null
Verweis festgelegt ist, ist keinem Objekt zugeordnet. Dies wird im folgenden Beispiel veranschaulicht:
Module Module1
Sub Main()
Dim testObject As Object
' The following statement sets testObject so that it does not refer to
' any instance.
testObject = Nothing
Dim tc As New TestClass
tc = Nothing
' The fields of tc cannot be accessed. The following statement causes
' a NullReferenceException at run time. (Compare to the assignment of
' Nothing to structure ts in the previous example.)
'Console.WriteLine(tc.Field1)
End Sub
Class TestClass
Public Field1 As Integer
' . . .
End Class
End Module
Um zu prüfen, ob eine Referenzvariable (oder eine Variable vom Typ NULL-Wert) null
ist, verwenden Sie immer Is Nothing
oder IsNot Nothing
. Verwenden Sie nicht = Nothing
oder <> Nothing
.
Für Zeichenfolgen in Visual Basic entspricht Nothing
die leere Zeichenfolge . Daher ist "" = Nothing
richtig. Diese Tatsache macht es besonders wichtig, dass Sie den richtigen Vergleich wählen, wenn Sie mit Zeichenfolgen arbeiten. Obwohl myString = Nothing
und myString <> Nothing
angeben, ob ein nicht leerer Wert gesetzt ist, empfehlen wir dringend, für diesen Zweck String.IsNullOrEmpty(myString)
zu verwenden. Verwenden Sie Is Nothing
und IsNot Nothing
, um festzustellen, ob ein beliebiger Wert, einschließlich einer leeren Zeichenkette, gesetzt wurde.
Das folgende Beispiel zeigt Vergleiche, die die Is
Operatoren und IsNot
verwenden:
Module Module1
Sub Main()
Dim testObject As Object
testObject = Nothing
Console.WriteLine(testObject Is Nothing)
' Output: True
Dim tc As New TestClass
tc = Nothing
Console.WriteLine(tc IsNot Nothing)
' Output: False
' Declare a nullable value type.
Dim n? As Integer
Console.WriteLine(n Is Nothing)
' Output: True
n = 4
Console.WriteLine(n Is Nothing)
' Output: False
n = Nothing
Console.WriteLine(n IsNot Nothing)
' Output: False
Console.ReadKey()
End Sub
Class TestClass
Public Field1 As Integer
Private field2 As Boolean
End Class
End Module
Wenn Sie eine Variable deklarieren, ohne eine As
-Klausel zu verwenden und sie auf Nothing
festzulegen, hat die Variable den Typ .Object
Das Beispiel dafür ist Dim something = Nothing
. Ein Kompilierzeitfehler tritt in diesem Fall auf, wenn Option Strict
ein- und Option Infer
ausgeschaltet ist.
Wenn Sie einer Objektvariablen zuweisenNothing
, verweist sie nicht mehr auf ein Objekt instance. Wenn die Variable zuvor auf eine instance verwiesen hat, Nothing
wird die instance nicht beendet. Die instance wird beendet, und die zugehörigen Arbeitsspeicher- und Systemressourcen werden erst freigegeben, nachdem der Garbage Collector (GC) erkannt hat, dass keine aktiven Verweise mehr vorhanden sind.
Nothing
unterscheidet sich vom DBNull -Objekt, das eine nicht initialisierte Variante oder eine nicht vorhandene Datenbankspalte darstellt.