Condividi tramite


Nothing (Visual Basic)

Rappresenta il valore predefinito di qualsiasi tipo di dati.Per i tipi di riferimento, il valore predefinito è null riferimento.Per i tipi di valore, il valore predefinito varia a seconda che il tipo di valore è nullable.

[!NOTA]

Per i tipi di valore non nullable, Nothing in Visual Basic differisce da null in c#.In Visual Basic, se si imposta una variabile di un tipo di valore non nullable a Nothing, la variabile è impostata sul valore predefinito per il suo tipo dichiarato.In c#, se si assegna una variabile di un tipo di valore non nullable a null, un errore in fase di compilazione si verifica.

Note

Nothing rappresenta il valore predefinito di un tipo di dati.Il valore predefinito varia a seconda che la variabile è di un tipo di valore o di un tipo di riferimento.

Una variabile di un oggetto tipo di valore contiene direttamente il valore.I tipi di valore sono inclusi tutti i tipi di dati numerici, Boolean, Char, Date, tutte le strutture e le enumerazioni.Una variabile di un oggetto tipo di riferimento archivia un riferimento a un'istanza di oggetto in memoria.I tipi di riferimento sono incluse le classi, le matrici, delegati e stringhe.Per ulteriori informazioni, vedere Tipi valore e tipi riferimento.

Se una variabile è di tipo valore, il comportamento di Nothing varia a seconda che la variabile è di un tipo di dati nullable.Per rappresentare un tipo di valore nullable, aggiungere un oggetto ? modificatore al nome del tipo.assegnare Nothing le nullable una variabile imposta il valore su null.Per ulteriori informazioni ed esempi, vedere Tipi di valori nullable (Visual Basic).

se una variabile è di un tipo di valore che non è nullable, assegnare Nothing lo impostato il valore predefinito per il tipo dichiarato.Se nel tipo si trovano membri variabili, questi vengono tutti impostati ai valori predefiniti corrispondenti.Questo comportamento viene illustrato nell'esempio seguente 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 Nothing 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 tipo riferimento, assegnare Nothing per impostare variabili a un oggetto null riferimento del tipo della variabile.Una variabile che è impostata su null il riferimento non associato ad alcun oggetto.Nell'esempio che segue viene illustrato quanto descritto.

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

Nel controllare se tipo di valore NULL o di riferimento) una variabile sia null, non utilizzare = Nothing o <> Nothing.Utilizzare sempre Is Nothing o IsNot Nothing.

Per le stringhe in Visual Basic, equals di stringa vuota Nothing.di conseguenza, "" = Nothing è true.

Nell'esempio seguente vengono illustrati confronti in cui vengono utilizzati gli operatori Is 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 utilizzare una clausola As e la si imposta su Nothing, la variabile dispone di un tipo di Object.Un esempio è Dim something = Nothing.Un errore in fase di compilazione si verifica in questo caso Option Strict è attivato e Option Infer è disattivato.

Quando si assegna la parola chiave Nothing a una variabile oggetto, tale variabile non farà più riferimento all'istanza di un oggetto.Se in precedenza la variabile ha fatto riferimento a un'istanza, l'istanza non viene automaticamente terminata quando si imposta la variabile su Nothing.L'istanza viene terminata e le risorse di memoria e di sistema associate a essa vengono rilasciate solo quando il Garbage Collector non rileva più riferimenti attivi.

Nothing è diverso da DBNull oggetto, che rappresenta una variante non inizializzate o una colonna inesistente del database.

Vedere anche

Riferimenti

Istruzione Dim (Visual Basic)

Operatore Is (Visual Basic)

Operatore IsNot (Visual Basic)

Concetti

Durata degli oggetti: come creare e distruggere oggetti (Visual Basic)

Durata in Visual Basic

Tipi di valori nullable (Visual Basic)