Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Typ Nullable<'T> hodnoty null představuje libovolný typ struktury, který může být nulltaké . To je užitečné při interakci s knihovnami a komponentami, které se můžou rozhodnout tyto typy typů, jako jsou celá čísla, s null hodnotou z důvodů efektivity. Základní typ, který tento konstruktor zálohuje, je System.Nullable<T>.
Syntaxe
Nullable<'T>
Nullable value
Deklarace a přiřazení pomocí hodnot
Deklarování typu hodnoty null je stejně jako deklarování jakéhokoli typu podobného obálky v jazyce F#:
open System
let x = 12
let nullableX = Nullable<int> x
Můžete také elidovat parametr obecného typu a povolit odvození typu, aby ho vyřešil:
open System
let x = 12
let nullableX = Nullable x
Pokud chcete přiřadit k typu hodnoty s možnou hodnotou null, musíte být také explicitní. Neexistuje žádný implicitní převod pro typy hodnot s možnou hodnotou null definovaných jazykem F#:
open System
let mutable x = Nullable 12
x <- Nullable 13
Přiřadit hodnotu null
Nelze přímo přiřadit null k typu hodnoty s možnou hodnotou null. Místo toho použijte Nullable() :
let mutable a = Nullable 42
a <- Nullable()
Je to proto, že Nullable<'T> nemá null správnou hodnotu.
Předání a přiřazení členům
Klíčovým rozdílem mezi prací se členy a hodnotami F# je to, že typy hodnot s možnou hodnotou null lze implicitně odvodit při práci s členy. Vezměte v úvahu následující metodu, která jako vstup přebírá typ hodnoty nullable:
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
V předchozím příkladu můžete předat 12 metodě M. Můžete také přiřadit 12 k automatické vlastnosti NVT. Pokud lze vstup vytvořit jako typ hodnoty s možnou hodnotou null a odpovídá cílovému typu, kompilátor jazyka F# implicitně převede taková volání nebo přiřazení.
Prozkoumání instance typu hodnoty s možnou hodnotou null
Na rozdíl od možnosti, což je generalizovaný konstruktor pro reprezentaci možné hodnoty, typy hodnot null nelze použít s porovnávání vzorů. Místo toho musíte použít if výraz a zkontrolovat HasValue vlastnost.
Pokud chcete získat podkladovou hodnotu, použijte Value vlastnost po HasValue kontrole, například takto:
open System
let a = Nullable 42
if a.HasValue then
printfn $"{a} is {a.Value}"
else
printfn $"{a} has no value."
Operátory s možnou hodnotou null
Operace s typy hodnot s možnou hodnotou null, jako jsou aritmetické nebo porovnání, mohou vyžadovat použití operátorů s možnou hodnotou null.
Pomocí operátorů převodu z oboru názvů můžete převést z jednoho typu hodnoty s možnou FSharp.Linq hodnotou null na jiný:
open System
open FSharp.Linq
let nullableInt = Nullable 10
let nullableFloat = Nullable.float nullableInt
K převodu na primitivní typ můžete použít také vhodný operátor bez hodnoty null, který riskuje výjimku, pokud nemá žádnou hodnotu:
open System
open FSharp.Linq
let nullableFloat = Nullable 10.0
let standardFloat = float nullableFloat
printfn $"value is %f{float standardFloat}"
Operátory s možnou hodnotou null můžete použít také jako stručnou kontrolu HasValue a 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
Porovnání ?> zkontroluje, jestli je levá strana s možnou hodnotou null a bude úspěšná, pouze pokud má hodnotu. Je ekvivalentní řádku, který následuje za ním.