null 許容値型
"Null 許容値型" Nullable<'T>
は、null
になることもある任意の構造体型を表します。 これは、効率上の理由から、整数のようなこの種の型を null
値で表すことを選択することがあるライブラリやコンポーネントとやり取りする場合に役立ちます。 このコンストラクトを支える基となる型は System.Nullable<T> です。
構文
Nullable<'T>
Nullable value
宣言と値の割り当て
F# での Null 許容値型の宣言は、ラッパーのような型を宣言する場合と同じです。
open System
let x = 12
let nullableX = Nullable<int> x
ジェネリック型パラメーターを省略し、型の推定で解決することもできます。
open System
let x = 12
let nullableX = Nullable x
Null 許容値型に割り当てるには、明示的にする必要もあります。 F# で定義された Null 許容値型の暗黙的な変換はありません。
open System
let mutable x = Nullable 12
x <- Nullable 13
null を割り当てる
null
を Null 許容値型に直接割り当てることはできません。 代わりに、Nullable()
を使用してください。
let mutable a = Nullable 42
a <- Nullable()
これは、Nullable<'T>
に適切な値として null
がないためです。
メンバーへの引き渡しと割り当て
メンバーと F# 値を操作する場合の主な違いは、メンバーを操作する場合は、Null 許容値型を暗黙的に推定できることです。 Null 許容値型を入力として受け取る次のメソッドについて考えてみましょう。
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
前の例では、メソッド M
に 12
を渡すことができます。 12
を自動プロパティ NVT
に割り当てることもできます。 入力を Null 許容値型として構築することができ、それがターゲット型と一致する場合、F# コンパイラにより、そのような呼び出しまたは割り当ては暗黙的に変換されます。
Null 許容値型インスタンスを調べる
使用できる値を表すための一般化されたコンストラクトである Option とは異なり、Null 許容値型はパターン マッチングでは使用されません。 代わりに、if
式を使用して、HasValue
プロパティを確認する必要があります。
基になる値を取得するには、次のように HasValue
チェックの後に Value
プロパティを使用します。
open System
let a = Nullable 42
if a.HasValue then
printfn $"{a} is {a.Value}"
else
printfn $"{a} has no value."
Null 許容演算子
算術演算や比較などの Null 許容値型に対する操作では、Null 許容演算子の使用が必要になる場合があります。
FSharp.Linq
名前空間の変換演算子を使用して、ある Null 許容値型を別の型に変換できます。
open System
open FSharp.Linq
let nullableInt = Nullable 10
let nullableFloat = Nullable.float nullableInt
null 非許容の適切な演算子を使用してプリミティブ型に変換することもできますが、値がない場合は、例外が発生するリスクがあります。
open System
open FSharp.Linq
let nullableInt = Nullable 10
let nullableFloat = Nullable.float nullableInt
printfn $"value is %f{float nullableFloat}"
HasValue
と Value
を確認するための省略形として Null 許容演算子を使用することもできます。
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
?>
の比較により、左側が Null 許容かどうかが確認されます。これは、値がある場合にのみ成功します。 これは、それに続く行と同じです。
関連項目
.NET
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示