Nichts Schlüsselwort (Visual Basic)

Stellt den Standardwert eines beliebigen Datentyps dar. Für Referenztypen ist der Standardwert der null Verweis. Bei Werttypen hängt der Standardwert davon ab, ob der Werttyp nullfähig ist.

Hinweis

Bei nicht nullablen Werttypen Nothing unterscheidet sich Visual Basic von null C#. Wenn Sie in Visual Basic eine Variable eines nicht nullablen Werttyps Nothingauf festlegen, wird die Variable auf den Standardwert für den deklarierten Typ festgelegt. Wenn Sie in C#eine Variable eines nicht nullablen Werttyps nullzuweisen, tritt ein Kompilierungszeitfehler auf.

Hinweise

Nothing stellt den Standardwert eines Datentyps dar. Der Standardwert hängt davon ab, ob die Variable ein Werttyp oder ein Referenztyp ist.

Eine Variable eines Werttyps enthält direkt seinen Wert. Werttypen umfassen alle numerischen Datentypen, Boolean, , CharDatealle Strukturen und alle Enumerationen. Eine Variable eines Referenztyps speichert einen Verweis auf eine Instanz des Objekts im Arbeitsspeicher. Referenztypen umfassen Klassen, Arrays, Stellvertretungen und Zeichenfolgen. Weitere Informationen finden Sie unter Werttypen und Referenztypen.

Wenn eine Variable ein Werttyp ist, hängt das Verhalten Nothing davon ab, ob die Variable ein nullabler Datentyp ist. Um einen Nullwerttyp darzustellen, fügen Sie dem Typnamen einen ? Modifizierer hinzu. Nothing Zuweisen zu einer nullablen Variable legt den Wert auf null. Weitere Informationen und Beispiele finden Sie unter Nullable-Werttypen.

Wenn eine Variable ein Werttyp ist, der nicht nullfähig ist, Nothing wird es dem Standardwert für den deklarierten Typ zugewiesen. Wenn dieser Typ variable Elemente enthält, werden sie alle auf ihre Standardwerte festgelegt. Im folgenden Beispiel wird dies für Skalartypen veranschaulicht.

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 ein Referenztyp ist, Nothing wird die Variable einem null Verweistyp zugewiesen. 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

Wenn Sie überprüfen, ob eine Referenzvariable (oder nullable Werttyp) variable ist null, verwenden = Nothing Sie nicht oder <> Nothing. Immer verwenden Is Nothing oder IsNot Nothing.

Für Zeichenfolgen in Visual Basic entspricht Nothingdie leere Zeichenfolge . Daher ist es "" = Nothing wahr.

Im folgenden Beispiel werden Vergleiche gezeigt, die die und die IsIsNot Operatoren 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 ohne Verwendung einer As Klausel deklarieren und auf Nothingfestlegen, hat die Variable einen Typ von Object. Ein Beispiel dafür ist Dim something = Nothing. Ein Kompilierungszeitfehler tritt in diesem Fall auf, wenn Option Strict es aktiviert und Option Infer deaktiviert ist.

Wenn Sie einer Objektvariable zuweisen Nothing , bezieht sie sich nicht mehr auf eine Objektinstanz. Wenn die Variable zuvor auf eine Instanz verwiesen wurde, wird die Nothing Instanz nicht beendet. Die Instanz wird beendet, und die Speicher- und Systemressourcen, die sie zugeordnet sind, werden freigegeben, nur nachdem der Garbage Collector (GC) erkennt, dass keine aktiven Verweise vorhanden sind.

Nothing unterscheidet sich von dem DBNull Objekt, das eine nicht vorhandene Datenbankspalte darstellt.

Weitere Informationen