Mot clé Nothing (Visual Basic)
Représente la valeur par défaut d’un type de données quelconque. Pour les types référence, la valeur par défaut est la référence null
. Pour les types valeur, la valeur par défaut varie selon que le type de valeur est null ou non.
Notes
Pour les types de valeurs non-nullables, Nothing
en Visual Basic diffère de null
en C#. En Visual Basic, si vous définissez une variable d’un type de valeur non-nullable sur Nothing
, la variable est définie sur la valeur par défaut pour son type déclaré. En C#, si vous affectez une variable d’un type valeur non-nullable à null
, une erreur de compilation se produit.
Notes
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 référence incluent des classes, des tableaux, des délégués et des chaînes. Pour plus d'informations, consultez Value Types and Reference Types.
Si une variable est d’un type valeur, le comportement de Nothing
dépend de si la variable est d’un type de données pouvant accepter la valeur Null. Pour représenter un type valeur pouvant accepter la valeur Null, ajoutez un modificateur ?
au nom de type. L’affectation de Nothing
à une variable pouvant accepter la valeur Null définit la valeur sur null
. Pour plus d’informations et d’exemples, consultez Types de valeurs pouvant accepter la valeur Null.
Si une variable est d’un type valeur qui n’accepte pas la valeur Null, lui affecter Nothing
la définit sur la valeur par défaut pour son type déclaré. Si ce type contient des membres variables, ils sont tous définis sur leurs valeurs par défaut. L’exemple suivant illustre cela 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, affecter Nothing
à la variable la définit sur une référence null
du type de la variable. Une variable définie sur une référence null
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
Lorsque vous vérifiez si une variable de référence (ou de type valeur pouvant accepter la valeur Null) est null
, utilisez toujours Is Nothing
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
est vrai. Cela rend particulièrement important le fait 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)
à cette fin. Utilisez Is Nothing
et IsNot Nothing
pour déterminer si une valeur, y compris une chaîne vide, a été définie.
L’exemple suivant montre des comparaisons qui utilisent les opérateurs Is
et 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
Si vous déclarez une variable sans utiliser de clause As
et que vous la définissez sur Nothing
, la variable a un type de Object
. Dim something = Nothing
en est un exemple. Une erreur de compilation se produit dans ce cas lorsque Option Strict
est activé et Option Infer
désactivé.
Lorsque vous attribuez Nothing
à une variable objet, elle ne fait plus référence à une instance d’objet. Si la variable avait précédemment fait référence à un instance, sa définition sur Nothing
n’arrête pas l’instance elle-même. La instance est terminée, et la mémoire et les ressources système qui lui sont associées sont libérées, uniquement après que le récupérateur de mémoire (GC) a détecté qu’il ne reste plus de références actives.
Nothing
diffère de l’objet DBNull, qui représente une variante non initialisée ou une colonne de base de données inexistante.