Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Rappresenta il valore predefinito di qualsiasi tipo di dati. Per i tipi di riferimento, il valore predefinito è il null riferimento. Per i tipi valore, il valore predefinito dipende dal fatto che il tipo di valore sia nullable.
Annotazioni
Per i tipi valore non nullable, Nothing in Visual Basic differisce da null in C#. In Visual Basic, se si imposta una variabile di un tipo valore non nullable su Nothing, la variabile viene impostata sul valore predefinito per il tipo dichiarato. In C#, se si assegna una variabile di un tipo valore non nullable a null, si verifica un errore in fase di compilazione.
Osservazioni:
Nothing rappresenta il valore predefinito di un tipo di dati. Il valore predefinito dipende dal fatto che la variabile sia di un tipo valore o di un tipo riferimento.
Una variabile di un tipo valore contiene direttamente il relativo valore. I tipi valore includono tutti i tipi di dati numerici, Boolean, Char, Date, tutte le strutture e tutte le enumerazioni. Una variabile di un tipo riferimento archivia un riferimento a un'istanza dell'oggetto in memoria. I tipi di riferimento includono classi, matrici, delegati e stringhe. Per altre informazioni, vedere Tipi valore e tipi di riferimento.
Se una variabile è di un tipo valore, il comportamento di Nothing dipende dal fatto che la variabile sia di un tipo di dati nullable. Per rappresentare un tipo di valore nullable, aggiungere un ? modificatore al nome del tipo. L'assegnazione Nothing a una variabile nullable imposta il valore su null. Per altre informazioni ed esempi, vedere Tipi valore nullable.
Se una variabile è di un tipo valore che non è nullable, assegnandola Nothing al valore predefinito per il tipo dichiarato. Se il tipo contiene membri di variabile, tutti sono impostati sui valori predefiniti. Nell'esempio seguente viene illustrato questo valore per i tipi scalari.
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
Se una variabile è di un tipo riferimento, l'assegnazione Nothing alla variabile lo imposta su un null riferimento del tipo della variabile. Una variabile impostata su un null riferimento non è associata ad alcun oggetto . Nell'esempio seguente viene illustrato quanto segue:
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
Per verificare se una variabile reference (o un tipo di valore nullable) è null, usare Is Nothing sempre o IsNot Nothing. Non utilizzare = Nothing o <> Nothing.
Per le stringhe in Visual Basic, la stringa vuota è uguale a Nothing. Pertanto, "" = Nothing è vero. Questo fatto rende particolarmente importante scegliere il confronto corretto quando si lavora con le stringhe. Sebbene myString = Nothing e myString <> Nothing indichino se è impostato un valore non vuoto, è consigliabile usare String.IsNullOrEmpty(myString) per questo scopo. Utilizzare Is Nothing e IsNot Nothing per determinare se è stato impostato un valore, inclusa una stringa vuota.
Nell'esempio seguente vengono illustrati i confronti che usano gli Is operatori e 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
Se si dichiara una variabile senza usare una As clausola e la si imposta su Nothing, la variabile ha un tipo di Object. Un esempio di questo è Dim something = Nothing. In questo caso si verifica un errore in fase di compilazione quando Option Strict è attivato e Option Infer disattivato.
Quando si assegna Nothing a una variabile oggetto, non fa più riferimento a un'istanza dell'oggetto. Se la variabile aveva precedentemente fatto riferimento a un'istanza di , impostandola su Nothing non termina l'istanza stessa. L'istanza viene terminata e le risorse di sistema e di memoria associate vengono rilasciate solo dopo che il Garbage Collector rileva che non sono presenti riferimenti attivi rimanenti.
Nothing differisce dall'oggetto DBNull , che rappresenta una variante non inizializzata o una colonna di database inesistente.