Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ein Nullwerttyp Nullable<'T>
stellt einen beliebigen Strukturtyp dar, der auch sein null
kann. Das ist bei der Interaktion mit Bibliotheken und Komponenten nützlich, die solche Typen – z. B. ganze Zahlen – möglicherweise aus Effizienzgründen mit einem null
-Wert darstellen. Der zugrunde liegende Typ, der dieses Konstrukt zurückgibt, ist System.Nullable<T>.
Syntax
Nullable<'T>
Nullable value
Deklarieren und Zuweisen mit Werten
Das Deklarieren eines Nullwerte zulassenden Typs entspricht dem Deklarieren eines beliebigen Wrapper-ähnlichen Typs in F#:
open System
let x = 12
let nullableX = Nullable<int> x
Zum Auflösen können Sie auch den generischen Typparameter ignorieren und den Typrückschluss zulassen:
open System
let x = 12
let nullableX = Nullable x
Zur Zuweisung zu einem Nullwerte zulassenden Typ muss die Deklaration explizit sein. Für Typen, die in F# definiert werden und Nullwerte zulassen, gibt es keine implizite Konvertierung:
open System
let mutable x = Nullable 12
x <- Nullable 13
Zuweisen von NULL
Sie können null
nicht direkt einem Nullwerte zulassenden Typ zuweisen. Verwenden Sie stattdessen Nullable()
:
let mutable a = Nullable 42
a <- Nullable()
Das liegt daran, dass null
für Nullable<'T>
nicht als richtiger Wert vorhanden ist.
Übergeben an Member und Zuweisen zu Membern
Ein wichtiger Unterschied zwischen der Arbeit mit Membern und der Arbeit mit F#-Werten besteht darin, dass Nullwerte zulassende Typen implizit abgeleitet werden können, wenn Sie mit Membern arbeiten. Sehen Sie sich die folgende Methode an, die einen Nullwerte zulassenden Typ als Eingabe verwendet:
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
Im vorherigen Beispiel können Sie 12
an die Methode M
übergeben. Sie können 12
auch der automatischen Eigenschaft NVT
zuweisen. Wenn die Eingabe als Nullwerte zulassender Typ erstellt werden kann und dem Zieltyp entspricht, konvertiert der F#-Compiler solche Aufrufe oder Zuweisungen implizit.
Untersuchen einer Instanz eines Nullwerte zulassenden Typs
Im Gegensatz zu Optionen, die ein generalisiertes Konstrukt für die Darstellung eines möglichen Werts sind, werden Nullwerte zulassende Typen nicht mit Musterabgleich verwendet. Stattdessen müssen Sie einen if
-Ausdruck verwenden und die HasValue
-Eigenschaft überprüfen.
Um den zugrunde liegenden Wert abzurufen, verwenden Sie die Value
-Eigenschaft nach einer HasValue
-Überprüfung wie folgt:
open System
let a = Nullable 42
if a.HasValue then
printfn $"{a} is {a.Value}"
else
printfn $"{a} has no value."
Operatoren, die NULL-Werte zulassen
Vorgänge mit Nullwerte zulassenden Werttypen, z. B. arithmetische Operationen oder Vergleichsvorgänge, können die Verwendung von Nullwerte zulassenden Operatoren erfordern.
Sie können einen Nullwerte zulassenden Typ in einen anderen konvertieren, indem Sie Konvertierungsoperatoren aus dem Namespace FSharp.Linq
verwenden:
open System
open FSharp.Linq
let nullableInt = Nullable 10
let nullableFloat = Nullable.float nullableInt
Sie können auch einen geeigneten Operator verwenden, der keine Nullwerte zulässt, um in einen Grundtyp zu konvertieren und eine Ausnahme zu riskieren, wenn kein Wert vorhanden ist:
open System
open FSharp.Linq
let nullableFloat = Nullable 10.0
let standardFloat = float nullableFloat
printfn $"value is %f{float standardFloat}"
Sie können auch Nullwerte zulassende Operatoren als Kurzversion für die Überprüfung von HasValue
und Value
verwenden:
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
Der ?>
-Vergleich überprüft, ob die linke Seite Nullwerte zulässt, und ist nur erfolgreich, wenn ein Wert vorhanden ist. Dies entspricht der darauf folgenden Zeile.