Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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 Nothing
valeur 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
, , Char
Date
toutes 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 Nothing
sur , 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.