Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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.