Aracılığıyla paylaş


Null değerler (F#)

Bu konuda nasıl boş değer F# kullanıldığını açıklar.

Boş değer

Null değeri normalde F# değerler veya değişkenler için kullanılmaz. Ancak, belirli durumlarda olağan dışı bir değer olarak null görünür. Bir tür F# tanımlanırsa, null normal değeri sürece izin verilmiyor AllowNullLiteral öznitelik türü uygulanır. Bazı diğer bir tür tanımlanmış olması durumunda.Böyle türleriyle birlikte çalışma, F# kodu boş değerler karşılaşabileceğiniz ve net dil, null olası bir değerdir.

Tanımlanan F# ve F# kesinlikle kullanılan türü için tek yolu F# kitaplığı kullanılarak doğrudan boş bir değer oluşturmak için kullanmaktır Unchecked.defaultof veya Array.zeroCreate. Ancak, bir F# türü, diğer kullanılır.net dilleri veya bu tür F# gibi yazılmaz bir API ile kullanıyorsanız.net Framework, boş değerler ortaya çıkabilir.

Kullanabileceğiniz option f başka bir olası boş değer içeren bir baþvuru deðiþkenine kullanabilir, # yazın.net dili. F# ile null yerine option türü, seçenek değeri kullanmak None hiçbir nesne ise. Seçenek değeri kullanmak Some(obj) bir nesneyle obj bir nesneyi olduğunda. Daha fazla bilgi için bkz. Seçenekler (F#).

null F# dilinde geçerli bir anahtar sözcüktür ve ile çalışırken kullanmanız gerekir.net Framework API'ları veya başka bir yazılı diğer API.net dili. Çağırdığınızda, içinde gerek duyabileceğinizi boş değer iki durumda olan bir.net API ve null değeri değişken olarak ve bir çıkış parametresi ya da dönüş değeri yorumladığınızda geçmesi bir.net yöntemi çağrısı.

Null değerine geçmek için bir.net yöntemi, yalnızca kullanım null çağıran kodun bir anahtar sözcük. Aşağıdaki kod örneği, bunu göstermektedir.

open System

// Pass a null value to a .NET method.
let ParseDateTime (str: string) =
    let (success, res) = DateTime.TryParse(str, null, System.Globalization.DateTimeStyles.AssumeUniversal)
    if success then
        Some(res)
    else
        None

Den elde edilen boş değer yorumlamak için bir.net yöntemi, mümkünse desen eşleştirmesini kullan. Aşağıdaki kod örneği tarafından döndürülen değeri yorumlamak için desen eşleştirmesini kullan gösterilmiştir ReadLine ne zaman çalışır bir giriş Akış sonunun okumak.

// Open a file and create a stream reader.
let fileStream1 =
    try
        System.IO.File.OpenRead("TextFile1.txt")
    with 
        | :? System.IO.FileNotFoundException -> printfn "Error: TextFile1.txt not found."; exit(1)

let streamReader = new System.IO.StreamReader(fileStream1)

// ProcessNextLine returns false when there is no more input;
// it returns true when there is more input.
let ProcessNextLine nextLine =
    match nextLine with
    | null -> false
    | inputString ->
        match ParseDateTime inputString with
        | Some(date) -> printfn "%s" (date.ToLocalTime().ToString())
        | None -> printfn "Failed to parse the input."
        true

// A null value returned from .NET method ReadLine when there is
// no more input.
while ProcessNextLine (streamReader.ReadLine()) do ()

F# türleri için null değerleri de oluşturulabilir kullandığınızda gibi başka şekillerde Array.zeroCreate, hangi çağrı Unchecked.defaultof. Kapsüllenmiş null değerlerini korumak için bu tür kodla dikkatli olmanız gerekir. Sadece F# için tasarlanmış bir kitaplıkta her işlev null değerleri denetleme gerekmez. Diğer uyumlu çalışabilmeleri için kitaplık yazıyorsanız.net dilleri olabileceğinden null denetler giriş parametreleri ve durum eklemek bir ArgumentNullException, C# [NULL]'ta yaptığınız gibi ya Visual Basic kod.

Rastgele bir deðer null olup olmadığını denetlemek için aşağıdaki kodu kullanabilirsiniz.

match box value with
| null -> printf "The value is null."
| _ -> printf "The value is not null."

Ayrıca bkz.

Başvuru

Eþleþme deyimleriyle (F#)

Diğer Kaynaklar

Değerler (F#)