Share via


Inget nyckelord (Visual Basic)

Representerar standardvärdet för alla datatyper. För referenstyper är standardvärdet referensen null . För värdetyper beror standardvärdet på om värdetypen är null.

Kommentar

För icke-nullbara värdetyper Nothing skiljer sig Visual Basic från null i C#. Om du i Visual Basic anger en variabel av en värdetyp som Nothinginte kan nullvärde anges variabeln till standardvärdet för den deklarerade typen. Om du i C# tilldelar en variabel av en värdetyp som inte kan nulliseras till nulluppstår ett kompileringsfel.

Kommentarer

Nothing representerar standardvärdet för en datatyp. Standardvärdet beror på om variabeln är av en värdetyp eller av en referenstyp.

En variabel av en värdetyp innehåller direkt dess värde. Värdetyper inkluderar alla numeriska datatyper, Boolean, Char, Date, alla strukturer och alla uppräkningar. En variabel av en referenstyp lagrar en referens till en instans av objektet i minnet. Referenstyper är klasser, matriser, ombud och strängar. Mer information finns i Värdetyper och Referenstyper.

Om en variabel är av en värdetyp beror beteendet Nothing på om variabeln är av en datatyp som kan vara null. Om du vill representera en nullbar värdetyp lägger du till en ? modifierare i typnamnet. Om du Nothing tilldelar till en nullbar variabel anges värdet till null. Mer information och exempel finns i Nullable Value Types (Nullable Value Types).

Om en variabel är av en värdetyp som inte är nullbar anger tilldelningen Nothing till den standardvärdet för den deklarerade typen. Om den typen innehåller variabelmedlemmar är de alla inställda på sina standardvärden. I följande exempel visas detta för skalära typer.

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

Om en variabel är av en referenstyp anger tilldelningen Nothing till variabeln den till en null referens av variabelns typ. En variabel som är inställd på en null referens är inte associerad med något objekt. Följande exempel visar detta:

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

Om du vill kontrollera om en referensvariabel (eller nullbar värdetyp) är nullanvänder du alltid Is Nothing eller IsNot Nothing. Använd inte = Nothing eller <> Nothing.

För strängar i Visual Basic är den tomma strängen lika med Nothing. "" = Nothing Därför är sant. Detta faktum gör det särskilt viktigt att du väljer rätt jämförelse när du arbetar med strängar. Även om myString = Nothing och myString <> Nothing anger om ett värde som inte är tomt har angetts rekommenderar vi starkt att du använder String.IsNullOrEmpty(myString) för det här ändamålet. Använd Is Nothing och IsNot Nothing för att avgöra om något värde, inklusive en tom sträng, har angetts.

I följande exempel visas jämförelser som använder operatorerna Is och 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

Om du deklarerar en variabel utan att använda en As sats och ställer in den på Nothinghar variabeln en typ av Object. Ett exempel på detta är Dim something = Nothing. Ett kompileringsfel inträffar i det här fallet när Option Strict är på och Option Infer är av.

När du tilldelar Nothing en objektvariabel refererar den inte längre till någon objektinstans. Om variabeln tidigare hade hänvisat till en instans avslutar inte inställningen Nothing den till själva instansen. Instansen avslutas och de minnes- och systemresurser som är associerade med den släpps först efter att skräpinsamlaren (GC) upptäckt att det inte finns några aktiva referenser kvar.

Nothing skiljer sig från objektet DBNull , som representerar en ennitialiserad variant eller en obefintlig databaskolumn.

Se även