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 Nothing
inte 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 null
uppstå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 null
anvä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å Nothing
har 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.