Freigeben über


Nothing-Schlüsselwort (Visual Basic)

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

Hinweis

Bei Nicht-Null-Wertetypen Nothing unterscheidet sich Visual Basic von null C# ab. Wenn Sie in Visual Basic eine Variable eines nicht nullablen Werttyps auf <a0/> 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.

Bemerkungen

Nothing stellt den Standardwert eines Datentyps dar. Der Standardwert hängt davon ab, ob die Variable einen Werttyp oder einen Bezugstyp aufweist.

Eine Variable eines Werttyps enthält seinen Wert direkt. Werttypen umfassen alle numerischen Datentypen, Boolean, , CharDate, alle Strukturen und alle Enumerationen. Eine Variable eines Verweistyps 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 einen Werttyp aufweist, hängt das Verhalten davon Nothing ab, ob die Variable einen nullfähigen Datentyp aufweist. Um einen Nullwerttyp darzustellen, fügen Sie dem Typnamen einen ? Modifizierer hinzu. Durch Nothing Zuweisen zu einer nullablen Variablen wird der Wert auf null. Weitere Informationen und Beispiele finden Sie unter Nullwertetypen.

Wenn eine Variable einen Werttyp aufweist, der nicht nullwertebar ist, wird sie durch Zuweisen Nothing auf den Standardwert für den deklarierten Typ festgelegt. Wenn dieser Typ Variablenmmber enthält, werden sie alle auf ihre Standardwerte festgelegt. Im folgenden Beispiel wird dies für skalare Typen 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 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. Im folgenden Beispiel wird dies 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 überprüfen, ob eine Bezugsvariable (oder nullable Werttyp)-Variable ist null, verwenden Is Nothing Oder IsNot Nothing. Verwenden Sie nicht = Nothing oder <> Nothing.

Für Zeichenfolgen in Visual Basic entspricht Nothingdie leere Zeichenfolge . "" = Nothing Daher ist es wahr. Diese Tatsache macht es besonders wichtig, dass Sie den richtigen Vergleich auswählen, wenn Sie mit Zeichenfolgen arbeiten. Obwohl myString = Nothing und myString <> Nothing angeben, ob ein nicht leerer Wert festgelegt ist, empfehlen wir dringend die Verwendung String.IsNullOrEmpty(myString) für diesen Zweck. Verwenden Sie und IsNot Nothing bestimmen SieIs Nothing, ob ein Beliebiger Wert, einschließlich einer leeren Zeichenfolge, festgelegt wurde.

Das folgende Beispiel zeigt Vergleiche, die die Is Operatoren 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 ohne Verwendung einer As Klausel deklarieren und auf Nothingdiese festlegen, hat die Variable einen Typ von Object. Ein Beispiel hierfür ist Dim something = Nothing. In diesem Fall tritt ein Kompilierzeitfehler auf, wenn Option Strict ein- und Option Infer ausgeschaltet ist.

Wenn Sie einer Objektvariable zuweisen Nothing , bezieht sie sich nicht mehr auf eine Objektinstanz. Wenn die Variable zuvor auf eine Instanz verwiesen hat, beendet sie Nothing die Instanz nicht selbst. Die Instanz wird beendet, und die zugeordneten Arbeitsspeicher- und Systemressourcen werden freigegeben, erst nachdem der Garbage Collector (GC) erkennt, dass keine aktiven Verweise verbleiben.

Nothing unterscheidet sich vom DBNull Objekt, das eine nicht initialisierte Variante oder eine nicht vorhandene Datenbankspalte darstellt.

Siehe auch