Nothing (Visual Basic)Nothing (Visual Basic)

Rappresenta il valore predefinito di qualsiasi tipo di dati.Represents the default value of any data type. Per i tipi di riferimento, il valore predefinito null è il riferimento.For reference types, the default value is the null reference. Per i tipi di valore, il valore predefinito dipende dal tipo di valore che ammette valori null.For value types, the default value depends on whether the value type is nullable.

Nota

Per i tipi di valore non Nullable Nothing , in Visual Basic differisce null da C#in.For non-nullable value types, Nothing in Visual Basic differs from null in C#. In Visual Basic, se si imposta una variabile di un tipo di valore non nullable su Nothing, la variabile viene impostata sul valore predefinito per il tipo dichiarato.In Visual Basic, if you set a variable of a non-nullable value type to Nothing, the variable is set to the default value for its declared type. In C#, se si assegna una variabile di un tipo di valore non nullable a null, si verifica un errore in fase di compilazione.In C#, if you assign a variable of a non-nullable value type to null, a compile-time error occurs.

NoteRemarks

Nothingrappresenta il valore predefinito di un tipo di dati.Nothing represents the default value of a data type. Il valore predefinito dipende dal fatto che la variabile sia di un tipo di valore o di un tipo di riferimento.The default value depends on whether the variable is of a value type or of a reference type.

Una variabile di un tipo di valore contiene direttamente il relativo valore.A variable of a value type directly contains its value. I tipi di valore includono tutti i tipi Booleandi Chardati Datenumerici,,,, tutte le strutture e tutte le enumerazioni.Value types include all numeric data types, Boolean, Char, Date, all structures, and all enumerations. Una variabile di un tipo riferimento archivia un riferimento a un'istanza dell'oggetto in memoria.A variable of a reference type stores a reference to an instance of the object in memory. I tipi di riferimento includono classi, matrici, delegati e stringhe.Reference types include classes, arrays, delegates, and strings. Per altre informazioni, vedere Value Types and Reference Types.For more information, see Value Types and Reference Types.

Se una variabile è di un tipo valore, il comportamento di Nothing varia a seconda che la variabile sia di un tipo di dati nullable.If a variable is of a value type, the behavior of Nothing depends on whether the variable is of a nullable data type. Per rappresentare un tipo di valore Nullable, aggiungere ? un modificatore al nome del tipo.To represent a nullable value type, add a ? modifier to the type name. Se si assegna a una variabile nullable, il valore viene impostato su null. NothingAssigning Nothing to a nullable variable sets the value to null. Per ulteriori informazioni ed esempi, vedere tipi di valore Nullable.For more information and examples, see Nullable Value Types.

Se una variabile è di un tipo valore che non ammette valori null, l' Nothing assegnazione a tale variabile lo imposta sul valore predefinito per il tipo dichiarato.If a variable is of a value type that is not nullable, assigning Nothing to it sets it to the default value for its declared type. Se il tipo contiene membri variabili, vengono impostati tutti sui rispettivi valori predefiniti.If that type contains variable members, they are all set to their default values. Nell'esempio seguente viene illustrato questo per i tipi scalari.The following example illustrates this for scalar types.

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.If a variable is of a reference type, assigning Nothing to the variable sets it to a null reference of the variable's type. Una variabile impostata su un null riferimento non è associata ad alcun oggetto.A variable that is set to a null reference is not associated with any object. Nell'esempio che segue viene illustrato quanto descritto.The following example demonstrates this.

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

Quando si verifica se una variabile di riferimento (o tipo di valore nullNullable) è, = Nothing non <> Nothingusare o.When checking whether a reference (or nullable value type) variable is null, do not use = Nothing or <> Nothing. Usare Is Nothing sempre o IsNot Nothing.Always use Is Nothing or IsNot Nothing.

Per le stringhe in Visual Basic, la stringa vuota è Nothinguguale a.For strings in Visual Basic, the empty string equals Nothing. Pertanto, "" = Nothing è true.Therefore, "" = Nothing is true.

Nell'esempio seguente vengono illustrati i confronti IsNot che utilizzano gli Is operatori e.The following example shows comparisons that use the Is and IsNot operators.

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 Nothingsu, la variabile ha un tipo Objectdi.If you declare a variable without using an As clause and set it to Nothing, the variable has a type of Object. Un esempio è Dim something = Nothing.An example of this is Dim something = Nothing. In questo caso si verifica un errore in fase di Option Strict compilazione quando è Option Infer attivo ed è disattivato.A compile-time error occurs in this case when Option Strict is on and Option Infer is off.

Quando si assegna Nothing a una variabile oggetto, non fa più riferimento a un'istanza dell'oggetto.When you assign Nothing to an object variable, it no longer refers to any object instance. Se la variabile ha precedentemente fatto riferimento a un'istanza, impostarla Nothing su non termina l'istanza stessa.If the variable had previously referred to an instance, setting it to Nothing does not terminate the instance itself. L'istanza viene terminata e le risorse di memoria e di sistema associate vengono rilasciate, solo dopo che il Garbage Collector (GC) rileva che non sono presenti riferimenti attivi rimanenti.The instance is terminated, and the memory and system resources associated with it are released, only after the garbage collector (GC) detects that there are no active references remaining.

Nothingdifferisce dall' DBNull oggetto, che rappresenta una variante non inizializzata o una colonna di database non esistente.Nothing differs from the DBNull object, which represents an uninitialized variant or a nonexistent database column.

Vedere ancheSee also