Boş değer atanabilen değer türleri

Null atanabilir değer türüNullable<'T>, olabilecek herhangi bir yapı türünü temsil nulleder. Bu, tamsayılar gibi bu tür türleri verimlilik nedenleriyle bir null değerle temsil etmeyi seçebilecek kitaplıklar ve bileşenlerle etkileşim kurarken yararlıdır. Bu yapıyı destekleyen temel tür: System.Nullable<T>.

Sözdizimi

Nullable<'T>
Nullable value

Değerlerle bildirme ve atama

Null atanabilir bir değer türü bildirmek, F# dilinde sarmalayıcı benzeri bir tür bildirmeye benzer:

open System

let x = 12
let nullableX = Nullable<int> x

Ayrıca genel tür parametresini de ekleyebilir ve bunu çözümlemek için tür çıkarımına izin vekleyebilirsiniz:

open System

let x = 12
let nullableX = Nullable x

Null atanabilir değer türüne atamak için açık olmanız gerekir. F#tanımlı null atanabilir değer türleri için örtük dönüştürme yoktur:

open System

let mutable x = Nullable 12
x <- Nullable 13

Null ata

Null atanabilir bir değer türüne doğrudan atayamazsınız null . Bunun yerine şunu kullanın Nullable() :

let mutable a = Nullable 42
a <- Nullable()

Bunun nedeni Nullable<'T> , uygun bir değere sahip null olmamasıdır.

Üyelere geçirme ve atama

Üyeler ve F# değerleriyle çalışma arasındaki temel fark, null atanabilir değer türlerinin, üyelerle çalışırken örtük olarak çıkarılabilmesidir. Giriş olarak null atanabilir bir değer türü alan aşağıdaki yöntemi göz önünde bulundurun:

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

Önceki örnekte yöntemine 12geçebilirsinizM. Otomatik özelliğine 12de atayabilirsinizNVT. Giriş null atanabilir bir değer türü olarak oluşturulabiliyorsa ve hedef türle eşleşiyorsa, F# derleyicisi bu çağrıları veya atamaları örtük olarak dönüştürür.

Boş değer atanabilir değer türü örneğini inceleme

Olası bir değeri temsil etmek için genelleştirilmiş bir yapı olan Seçenekler'in aksine, null atanabilir değer türleri desen eşleştirme ile kullanılmaz. Bunun yerine, bir if ifade kullanmanız ve özelliğini denetlemeniz HasValue gerekir.

Temel alınan değeri almak için denetimin Value ardından HasValue özelliğini kullanın, örneğin:

open System

let a = Nullable 42

if a.HasValue then
    printfn $"{a} is {a.Value}"
else
    printfn $"{a} has no value."

Boş değer atanabilir işleçler

Aritmetik veya karşılaştırma gibi null atanabilir değer türleri üzerindeki işlemler null atanabilir işleçler kullanılmasını gerektirebilir.

Ad alanındaki dönüştürme işleçlerini kullanarak bir null atanabilir değer türünden FSharp.Linq diğerine dönüştürebilirsiniz:

open System
open FSharp.Linq

let nullableInt = Nullable 10
let nullableFloat = Nullable.float nullableInt

İlkel bir türe dönüştürmek için uygun boş değer atanamaz işleci de kullanabilir ve değeri yoksa özel durum riski oluşturabilirsiniz:

open System
open FSharp.Linq

let nullableFloat = Nullable 10.0
let standardFloat = float nullableFloat

printfn $"value is %f{float standardFloat}"

Boş değer atanabilir işleçleri de denetimi HasValue ve Valueiçin kısa el olarak kullanabilirsiniz:

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

Karşılaştırma, ?> sol tarafın null atanabilir olup olmadığını denetler ve yalnızca bir değeri varsa başarılı olur. Bu, onu izleyen çizgiye eşdeğerdir.

Ayrıca bkz.