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.
Parfois, vous travaillez avec un type valeur qui n’a pas de valeur définie dans certaines circonstances. Par exemple, un champ d’une base de données peut avoir à faire la distinction entre avoir une valeur affectée qui est significative et ne pas avoir de valeur affectée. Les types valeur peuvent être étendus pour prendre leurs valeurs normales ou une valeur Null. Une telle extension est appelée type Nullable.
Chaque type de valeur nullable est construit à partir de la structure générique Nullable<T> . Considérez une base de données qui effectue le suivi des activités liées au travail. L’exemple suivant construit un type nullable Boolean
et déclare une variable de ce type. Vous pouvez écrire la déclaration de trois façons :
Dim ridesBusToWork1? As Boolean
Dim ridesBusToWork2 As Boolean?
Dim ridesBusToWork3 As Nullable(Of Boolean)
La variable ridesBusToWork
peut contenir une valeur de True
, une valeur de False
ou aucune valeur du tout. Sa valeur par défaut initiale n’est pas du tout une valeur, ce qui, dans ce cas, peut signifier que les informations n’ont pas encore été obtenues pour cette personne. En revanche, False
cela pourrait signifier que l’information a été obtenue et que la personne ne fait pas du bus pour travailler.
Vous pouvez déclarer des variables et des propriétés avec des types valeur nullables, et vous pouvez déclarer un tableau avec des éléments d’un type valeur nullable. Vous pouvez déclarer des procédures avec des types valeur nullables en tant que paramètres, et vous pouvez retourner un type valeur nullable à partir d’une Function
procédure.
Vous ne pouvez pas construire un type Nullable sur un type référence tel qu’un tableau, un String
ou une classe. Le type sous-jacent doit être un type valeur. Pour plus d’informations, consultez Types valeur et Types de référence.
Utilisation d’une variable de type Nullable
Les membres les plus importants d’un type valeur nullable sont ses propriétés et Value ses HasValue propriétés. Pour une variable d’un type valeur nullable, HasValue indique si la variable contient une valeur définie. Si HasValue c’est True
le cas, vous pouvez lire la valeur à partir de Value. Notez que les deux HasValue et Value sont des ReadOnly
propriétés.
Valeurs par défaut
Lorsque vous déclarez une variable avec un type valeur nullable, sa HasValue propriété a la valeur False
par défaut . Cela signifie que par défaut, la variable n’a aucune valeur définie, au lieu de la valeur par défaut de son type de valeur sous-jacent. Dans l’exemple suivant, la variable numberOfChildren
n’a initialement aucune valeur définie, même si la valeur par défaut du Integer
type est 0.
Dim numberOfChildren? As Integer
Une valeur Null est utile pour indiquer une valeur non définie ou inconnue. S’il numberOfChildren
avait été déclaré comme Integer
, il n’y aurait aucune valeur qui pourrait indiquer que les informations ne sont pas actuellement disponibles.
Stockage des valeurs
Vous stockez une valeur dans une variable ou une propriété d’un type valeur nullable de la manière classique. L’exemple suivant affecte une valeur à la variable numberOfChildren
déclarée dans l’exemple précédent.
numberOfChildren = 2
Si une variable ou une propriété d’un type valeur nullable contient une valeur définie, vous pouvez la faire revenir à son état initial de ne pas avoir de valeur affectée. Pour ce faire, définissez la variable ou la propriété Nothing
sur , comme l’illustre l’exemple suivant.
numberOfChildren = Nothing
Remarque
Bien que vous puissiez affecter Nothing
à une variable d’un type valeur nullable, vous ne pouvez pas le tester à Nothing
l’aide du signe égal. Comparaison qui utilise le signe égal, , someVar = Nothing
prend toujours la valeur Nothing
. Vous pouvez tester la propriété de HasValue la variable pour False
, ou tester à l’aide de l’opérateur ou IsNot
de l’opérateurIs
.
Récupération des valeurs
Pour récupérer la valeur d’une variable d’un type valeur nullable, vous devez d’abord tester sa HasValue propriété pour confirmer qu’elle a une valeur. Si vous essayez de lire la valeur quand c’est False
le casHasValue, Visual Basic lève une InvalidOperationException exception. L’exemple suivant montre la méthode recommandée pour lire la variable numberOfChildren
des exemples précédents.
If numberOfChildren.HasValue Then
MsgBox("There are " & CStr(numberOfChildren) & " children.")
Else
MsgBox("It is not known how many children there are.")
End If
Comparaison des types Nullable
Lorsque des variables nullables Boolean
sont utilisées dans des expressions booléennes, le résultat peut être True
, False
ou Nothing
. Voici la table de vérité pour And
et Or
. Étant donné que b1
et b2
maintenant ont trois valeurs possibles, il existe neuf combinaisons à évaluer.
b1 | b2 | b1 et b2 | b1 Ou b2 |
---|---|---|---|
Nothing |
Nothing |
Nothing |
Nothing |
Nothing |
True |
Nothing |
True |
Nothing |
False |
False |
Nothing |
True |
Nothing |
Nothing |
True |
True |
True |
True |
True |
True |
False |
False |
True |
False |
Nothing |
False |
Nothing |
False |
True |
False |
True |
False |
False |
False |
False |
Lorsque la valeur d’une variable ou d’une expression booléenne est Nothing
, elle n’est ni ni true
.false
Considérez l'exemple suivant.
Dim b1? As Boolean
Dim b2? As Boolean
b1 = True
b2 = Nothing
' The following If statement displays "Expression is not true".
If (b1 And b2) Then
Console.WriteLine("Expression is true")
Else
Console.WriteLine("Expression is not true")
End If
' The following If statement displays "Expression is not false".
If Not (b1 And b2) Then
Console.WriteLine("Expression is false")
Else
Console.WriteLine("Expression is not false")
End If
Dans cet exemple, b1 And b2
la Nothing
valeur est . Par conséquent, la Else
clause est exécutée dans chaque If
instruction et la sortie est la suivante :
Expression is not true
Expression is not false
Remarque
AndAlso
et OrElse
, qui utilisent l’évaluation de court-circuit, doivent évaluer leurs deuxième opérandes lorsque le premier est évalué à Nothing
.
Propagation
Si l’un ou les deux opérandes d’une opération arithmétique, de comparaison, de décalage ou de type est un type valeur nullable, le résultat de l’opération est également un type valeur nullable. Si les deux opérandes ont des valeurs qui ne sont pas Nothing
, l’opération est effectuée sur les valeurs sous-jacentes des opérandes, comme si aucun n’était un type valeur nullable. Dans l’exemple suivant, les variables compare1
et sum1
sont implicitement typées. Si vous placez le pointeur de la souris sur eux, vous verrez que le compilateur déduit les types de valeurs nullables pour les deux.
' Variable n is a nullable type, but both m and n have proper values.
Dim m As Integer = 3
Dim n? As Integer = 2
' The comparison evaluated is 3 > 2, but compare1 is inferred to be of
' type Boolean?.
Dim compare1 = m > n
' The values summed are 3 and 2, but sum1 is inferred to be of type Integer?.
Dim sum1 = m + n
' The following line displays: 3 * 2 * 5 * True
Console.WriteLine($"{m} * {n} * {sum1} * {compare1}")
Si un ou les deux opérandes ont une valeur Nothing
, le résultat sera Nothing
.
' Change the value of n to Nothing.
n = Nothing
Dim compare2 = m > n
Dim sum2 = m + n
' Because the values of n, compare2, and sum2 are all Nothing, the
' following line displays: 3 * <null> * <null> * <null>
Console.WriteLine($"{m} * {If(n, "<null>")} * {If(sum2, "<null>")} * {If(compare2, "<null>")}")
Utilisation de types Nullable avec des données
Une base de données est l’un des endroits les plus importants pour utiliser des types valeur nullables. Tous les objets de base de données ne prennent actuellement pas en charge les types de valeurs nullables, mais les adaptateurs de table générés par le concepteur le font. Consultez la prise en charge de TableAdapter pour les types nullables.