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.
Een type null-waardeNullable<'T> vertegenwoordigt elk structtype dat ook kan zijn null. Dit is handig bij interactie met bibliotheken en onderdelen die ervoor kunnen kiezen om dit soort typen, zoals gehele getallen, weer te geven met een null waarde om efficiƫntieredenen. Het onderliggende type dat deze constructie back-ups maakt, is System.Nullable<T>.
Syntaxis
Nullable<'T>
Nullable value
Declareren en toewijzen met waarden
Het declareren van een type null-waarde is net zoals het declareren van een wrapper-achtig type in F#:
open System
let x = 12
let nullableX = Nullable<int> x
U kunt ook de algemene typeparameter verwijderen en typedeductie toestaan om deze op te lossen:
open System
let x = 12
let nullableX = Nullable x
Als u wilt toewijzen aan een type null-waarde, moet u ook expliciet zijn. Er is geen impliciete conversie voor door F#gedefinieerde typen null-waarden:
open System
let mutable x = Nullable 12
x <- Nullable 13
Null toewijzen
U kunt niet rechtstreeks toewijzen aan null een type null-waarde. Gebruik Nullable() in plaats daarvan:
let mutable a = Nullable 42
a <- Nullable()
Dit komt doordat Nullable<'T> deze niet als een juiste waarde heeft null .
Doorgeven en toewijzen aan leden
Een belangrijk verschil tussen het werken met leden en F#-waarden is dat null-waardetypen impliciet kunnen worden afgeleid wanneer u met leden werkt. Houd rekening met de volgende methode die een type null-waarde als invoer gebruikt:
type C() =
member _.M(x: Nullable<int>) = x.HasValue
member val NVT = Nullable 12 with get, set
let c = C()
c.M(12)
c.NVT <- 12
In het vorige voorbeeld kunt u doorgeven 12 aan de methode M. U kunt ook toewijzen aan 12 de auto-eigenschap NVT. Als de invoer kan worden samengesteld als een null-waardetype en deze overeenkomt met het doeltype, converteert de F#-compiler impliciet dergelijke aanroepen of toewijzingen.
Een exemplaar van het type null-waarde onderzoeken
In tegenstelling tot Opties, een gegeneraliseerde constructie voor het weergeven van een mogelijke waarde, worden null-waardetypen niet gebruikt met patroonkoppeling. In plaats daarvan moet u een if expressie gebruiken en de HasValue eigenschap controleren.
Als u de onderliggende waarde wilt ophalen, gebruikt u de Value eigenschap na een HasValue controle, zoals volgt:
open System
let a = Nullable 42
if a.HasValue then
printfn $"{a} is {a.Value}"
else
printfn $"{a} has no value."
Null-operatoren
Bewerkingen voor typen null-waarden, zoals rekenkundige of vergelijkingen, kunnen het gebruik van null-operatoren vereisen.
U kunt converteren van het ene waardetype naar het andere met behulp van conversieoperators uit de FSharp.Linq naamruimte:
open System
open FSharp.Linq
let nullableInt = Nullable 10
let nullableFloat = Nullable.float nullableInt
U kunt ook een geschikte niet-null-operator gebruiken om te converteren naar een primitief type, wat een uitzondering riskeert als deze geen waarde heeft:
open System
open FSharp.Linq
let nullableFloat = Nullable 10.0
let standardFloat = float nullableFloat
printfn $"value is %f{float standardFloat}"
U kunt ook null-operatoren gebruiken als een korte hand voor het controleren HasValue en Value:
open System
open FSharp.Linq
let nullableInt = Nullable 10
let nullableFloat = Nullable.float nullableInt
let isBigger = nullableFloat ?> 1.0
let isBiggerLongForm = nullableFloat.HasValue && nullableFloat.Value > 1.0
De ?> vergelijking controleert of de linkerkant null-baar is en alleen slaagt als deze een waarde heeft. Het is gelijk aan de regel die erop volgt.