Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Soms werkt u met een waardetype dat in bepaalde omstandigheden geen gedefinieerde waarde heeft. Een veld in een database moet bijvoorbeeld onderscheid maken tussen een toegewezen waarde die zinvol is en geen toegewezen waarde heeft. Waardetypen kunnen worden uitgebreid om hun normale waarden of een null-waarde te nemen. Een dergelijke extensie wordt een null-type genoemd.
Elk type null-waarde wordt samengesteld uit de algemene Nullable<T> structuur. Overweeg een database die werkgerelateerde activiteiten bijhoudt. In het volgende voorbeeld wordt een nullbaar type Boolean
opgebouwd en wordt een variabele van dat type gedefinieerd. U kunt de declaratie op drie manieren schrijven:
Dim ridesBusToWork1? As Boolean
Dim ridesBusToWork2 As Boolean?
Dim ridesBusToWork3 As Nullable(Of Boolean)
De variabele ridesBusToWork
kan een waarde bevatten van True
, een waarde van False
of helemaal geen waarde. De oorspronkelijke standaardwaarde is helemaal geen waarde, wat in dit geval kan betekenen dat de informatie nog niet voor deze persoon is verkregen. Het kan daarentegen False
betekenen dat de informatie is verkregen en dat de persoon niet met de bus rijdt om te werken.
U kunt variabelen en eigenschappen declareren met typen null-waarden en u kunt een matrix declareren met elementen van een type null-waarde. U kunt procedures declareren met typen null-waarden als parameters en u kunt een type null-waarde uit een Function
procedure retourneren.
U kunt geen null-type maken voor een verwijzingstype, zoals een matrix, een String
of een klasse. Het onderliggende type moet een waardetype zijn. Zie Waardetypen en referentietypen voor meer informatie.
Het gebruik van een nullbaar type variabele
De belangrijkste leden van een nullable waarde-type zijn zijn HasValue- en Value-eigenschappen. Voor een variabele van een type null-waarde geeft HasValue u aan of de variabele een gedefinieerde waarde bevat. Als HasValueTrue
is, kunt u de waarde van Value lezen. Houd er rekening mee dat zowel HasValue als ValueReadOnly
eigenschappen zijn.
Standaardwaarden
Wanneer u een variabele declareert met een type null-waarde, heeft de HasValue eigenschap een standaardwaarde van False
. Dit betekent dat de variabele standaard geen gedefinieerde waarde heeft in plaats van de standaardwaarde van het onderliggende waardetype. In het volgende voorbeeld heeft de variabele numberOfChildren
aanvankelijk geen gedefinieerde waarde, ook al is de standaardwaarde van het Integer
type 0.
Dim numberOfChildren? As Integer
Een null-waarde is handig om een niet-gedefinieerde of onbekende waarde aan te geven. Als numberOfChildren
deze is gedeclareerd als Integer
, zou er geen waarde zijn die zou kunnen aangeven dat de informatie momenteel niet beschikbaar is.
Waarden opslaan
U slaat een waarde op in een variabele of eigenschap van een type null-waarde op de gebruikelijke manier. In het volgende voorbeeld wordt een waarde toegewezen aan de variabele numberOfChildren
die in het vorige voorbeeld is gedeclareerd.
numberOfChildren = 2
Als een variabele of eigenschap van een type null-waarde een gedefinieerde waarde bevat, kunt u ervoor zorgen dat deze wordt teruggezet naar de beginstatus van het niet toewijzen van een waarde. U doet dit door de variabele of eigenschap in te stellen op Nothing
, zoals in het volgende voorbeeld wordt weergegeven.
numberOfChildren = Nothing
Opmerking
Hoewel u Nothing
kunt toewijzen aan een variabele met een nullbaar type, kunt u deze niet testen op Nothing
met behulp van het gelijkteken. Vergelijking die gebruikmaakt van het gelijkteken, someVar = Nothing
, wordt altijd geƫvalueerd als Nothing
. U kunt de eigenschap van de variabele HasValue testen voor False
, of testen met behulp van de Is
of IsNot
-operator.
Waarden ophalen
Als u de waarde van een variabele van een type null-waarde wilt ophalen, moet u eerst de eigenschap ervan testen HasValue om te bevestigen dat deze een waarde heeft. Als u de waarde probeert te lezen wanneer HasValue de waarde False
heeft, gooit Visual Basic een InvalidOperationException uitzondering. In het volgende voorbeeld ziet u de aanbevolen manier om de variabele numberOfChildren
van de vorige voorbeelden te lezen.
If numberOfChildren.HasValue Then
MsgBox("There are " & CStr(numberOfChildren) & " children.")
Else
MsgBox("It is not known how many children there are.")
End If
Vergelijking van Nul-waarde typen
Wanneer nullable Boolean
-variabelen worden gebruikt in Boole-expressies, kan het resultaat True
, False
of Nothing
zijn. Hier volgt de waarheidstabel voor And
en Or
. Omdat b1
en b2
nu drie mogelijke waarden hebben, zijn er negen combinaties om te evalueren.
b1 | b2 | b1 en b2 | b1 of 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 |
Wanneer de waarde van een Booleaanse variabele of expressie is Nothing
, is dit noch true
false
. Bekijk het volgende voorbeeld.
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
In dit voorbeeld resulteert b1 And b2
in Nothing
. Als gevolg hiervan wordt de Else
component uitgevoerd in elke If
instructie en is de uitvoer als volgt:
Expression is not true
Expression is not false
Opmerking
AndAlso
en OrElse
, die kortsluitevaluatie gebruiken, moeten hun tweede operanden evalueren wanneer de eerste tot Nothing
wordt geƫvalueerd.
Voortplanting
Als een of beide operanden van een rekenkundige, vergelijkings-, dienst- of typebewerking een null-waardetype is, is het resultaat van de bewerking ook een type null-waarde. Als beide operanden waarden hebben die niet Nothing
zijn, wordt de bewerking uitgevoerd op de onderliggende waarden van de operanden, alsof ze geen null-waardetype zijn. In het volgende voorbeeld worden variabelen compare1
en sum1
impliciet getypt. Als u de muiswijzer erop plaatst, ziet u dat de compiler null-waardetypen voor beide afgeeft.
' 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}")
Als een of beide operanden een waarde Nothing
hebben, is Nothing
het resultaat.
' 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>")}")
Nullbare typen gebruiken bij gegevens
Een database is een van de belangrijkste plaatsen om null-waardetypen te gebruiken. Niet alle databaseobjecten ondersteunen momenteel nullable waardetypen, maar de door de ontwerper gegenereerde tabeladapters wel. Zie TableAdapter-ondersteuning voor null-typen.