Partager via


Mot clé Nothing (Visual Basic)

Représente la valeur par défaut de n’importe quel type de données. Pour les types de référence, la valeur par défaut est la null référence. Pour les types valeur, la valeur par défaut dépend de la valeur nullable.

Remarque

Pour les types valeur non nullables, Nothing Visual Basic diffère de null C#. Dans Visual Basic, si vous définissez une variable d’un type Nothingvaleur non Nullable sur , la variable est définie sur la valeur par défaut de son type déclaré. En C#, si vous affectez une variable d’un type valeur non nullable à null, une erreur au moment de la compilation se produit.

Remarques

Nothing représente la valeur par défaut d’un type de données. La valeur par défaut varie selon que la variable est d’un type valeur ou d’un type référence.

Une variable d’un type valeur contient directement sa valeur. Les types valeur incluent tous les types de données numériques, Boolean, , CharDatetoutes les structures et toutes les énumérations. Une variable d’un type référence stocke une référence à une instance de l’objet en mémoire. Les types de référence incluent des classes, des tableaux, des délégués et des chaînes. Pour plus d’informations, consultez Types valeur et Types de référence.

Si une variable est d’un type valeur, le comportement de Nothing varie selon que la variable est d’un type de données nullable. Pour représenter un type valeur nullable, ajoutez un ? modificateur au nom du type. L’affectation Nothing à une variable nullable définit la valeur sur null. Pour plus d’informations et d’exemples, consultez Types valeur nullable.

Si une variable est d’un type valeur qui n’est pas nullable, l’affectation Nothing lui affecte la valeur par défaut pour son type déclaré. Si ce type contient des membres de variable, ils sont tous définis sur leurs valeurs par défaut. L’exemple suivant illustre ceci pour les types scalaires.

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

Si une variable est d’un type référence, l’affectation Nothing à la variable la définit sur une null référence du type de la variable. Une variable définie sur une null référence n’est associée à aucun objet. Cela est illustré par l'exemple suivant :

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

Pour vérifier si une variable référence (ou type valeur nullable) est null, utilisez Is Nothing toujours ou IsNot Nothing. N'utilisez pas = Nothing ou <> Nothing.

Pour les chaînes en Visual Basic, la chaîne vide est égale Nothing. Par conséquent, "" = Nothing c’est vrai. Ce fait rend particulièrement important que vous choisissiez la comparaison correcte lorsque vous travaillez avec des chaînes. Bien que myString = Nothing et myString <> Nothing indiquent si une valeur non vide est définie, nous vous recommandons vivement d’utiliser String.IsNullOrEmpty(myString) à cet effet. Utilisez Is Nothing et IsNot Nothing déterminez si une valeur, y compris une chaîne vide, a été définie.

L’exemple suivant montre des comparaisons qui utilisent les opérateurs et IsNot les Is opérateurs :

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

Si vous déclarez une variable sans utiliser de As clause et définissez-la Nothingsur , la variable a un type de Object. Voici un exemple .Dim something = Nothing Une erreur au moment de la compilation se produit dans ce cas quand Option Strict elle est activée et Option Infer désactivée.

Lorsque vous affectez Nothing à une variable objet, elle ne fait plus référence à aucune instance d’objet. Si la variable avait précédemment fait référence à une instance, la définition de celle-ci Nothing ne met pas fin à l’instance elle-même. L’instance est arrêtée et les ressources système et mémoire associées sont libérées, uniquement après que le garbage collector (GC) détecte qu’il n’y a pas de références actives restantes.

Nothing diffère de l’objet DBNull , qui représente une variante non initialisée ou une colonne de base de données inexistante.

Voir aussi