Nic kluczowego (Visual Basic)

Reprezentuje wartość domyślną dowolnego typu danych. W przypadku typów referencyjnych wartość domyślna null to odwołanie. W przypadku typów wartości wartość domyślna zależy od tego, czy typ wartości jest dopuszczalny do wartości null.

Uwaga

W przypadku typów Nothing wartości innych niż null w Visual Basic różni się od null w języku C#. W języku Visual Basic, jeśli ustawisz zmienną typu wartości innej niż null na Nothingwartość , zmienna zostanie ustawiona na wartość domyślną dla zadeklarowanego typu. W języku C#, jeśli przypiszesz zmienną typu wartości innej niż null do null, wystąpi błąd czasu kompilacji.

Uwagi

Nothing reprezentuje wartość domyślną typu danych. Wartość domyślna zależy od tego, czy zmienna ma typ wartości, czy typ odwołania.

Zmienna typu wartości bezpośrednio zawiera jego wartość. Typy wartości obejmują wszystkie typy danych liczbowych, Boolean, , Char, Datewszystkie struktury i wszystkie wyliczenia. Zmienna typu odwołania przechowuje odwołanie do wystąpienia obiektu w pamięci. Typy referencyjne obejmują klasy, tablice, delegaty i ciągi. Aby uzyskać więcej informacji, zobacz Typy wartości i typy referencyjne.

Jeśli zmienna jest typu wartości, zachowanie zmiennej Nothing zależy od tego, czy zmienna ma typ danych dopuszczalny do wartości null. Aby reprezentować typ wartości dopuszczający wartość null, dodaj ? modyfikator do nazwy typu. Przypisanie Nothing do zmiennej dopuszczającej wartość null powoduje ustawienie wartości .null Aby uzyskać więcej informacji i przykładów, zobacz Typy wartości dopuszczanych do wartości null.

Jeśli zmienna jest typu wartości, która nie jest dopuszczana do wartości null, przypisanie Nothing do niej ustawia wartość domyślną dla zadeklarowanego typu. Jeśli ten typ zawiera elementy członkowskie zmiennych, wszystkie są ustawione na ich wartości domyślne. Poniższy przykład ilustruje to dla typów skalarnych.

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

Jeśli zmienna jest typu odwołania, przypisanie Nothing do zmiennej ustawia ją na null odwołanie typu zmiennej. Zmienna ustawiona na odwołanie nie jest skojarzona z żadnym obiektem null . W poniższym przykładzie pokazano następujące kwestie:

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

Aby sprawdzić, czy zmienna odwołania (lub typu wartości dopuszczanej do wartości null) to null, zawsze należy użyć Is Nothing polecenia lub IsNot Nothing. Nie używaj = Nothing ani <> Nothing.

W przypadku ciągów w Visual Basic pusty ciąg jest Nothingrówny . W związku z "" = Nothing tym to prawda. Ten fakt sprawia, że szczególnie ważne jest wybranie prawidłowego porównania podczas pracy z ciągami. Mimo że myString = Nothing i myString <> Nothing wskazuje, czy ustawiono niepustą wartość, zdecydowanie zalecamy użycie String.IsNullOrEmpty(myString) w tym celu. Użyj Is Nothing funkcji i IsNot Nothing , aby określić, czy ustawiono dowolną wartość, w tym pusty ciąg.

W poniższym przykładzie przedstawiono porównania korzystające z Is operatorów i IsNot :

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

Jeśli zadeklarowasz zmienną bez użycia klauzuli As i ustawisz ją na Nothing, zmienna ma typ Object. Przykładem tego jest Dim something = Nothing. W tym przypadku występuje błąd czasu kompilacji, gdy Option Strict jest włączony i Option Infer wyłączony.

Po przypisaniu Nothing do zmiennej obiektu nie odwołuje się ona już do żadnego wystąpienia obiektu. Jeśli zmienna wcześniej odwoływała się do wystąpienia, ustawienie jej na Nothing wartość nie spowoduje zakończenia samego wystąpienia. Wystąpienie zostanie zakończone, a skojarzone z nim zasoby pamięci i systemu zostaną zwolnione dopiero po wykryciu, że nie ma żadnych aktywnych odwołań.

Nothing różni się od DBNull obiektu, który reprezentuje niezainicjowany wariant lub nieistniejący kolumna bazy danych.

Zobacz też