Freigeben über


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 Nothingfestlegen, wird die Variable auf den Standardwert für ihren deklarierten Typ festgelegt. Wenn Sie in C# eine Variable eines Werttyps ohne Nullable zuweisen, nulltritt 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, Datealle 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 nullfestgelegt. 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 Nothingdie 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 Nothingfestzulegen, 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.

Siehe auch