Udostępnij za pośrednictwem


Wartości zerowe (F#)

W tym temacie opisano sposób użycia wartości null w F#.

Wartość NULL

Wartość null nie używa się zazwyczaj w F# dla wartości lub zmienne.Jednakże null pojawia się jako nieprawidłowej wartości w niektórych sytuacjach.Jeśli typ jest zdefiniowany w F#, null nie jest dozwolone jako wartość regularne, chyba że AllowNullLiteral atrybut jest stosowany do typu.Jeśli typ jest zdefiniowany w inne.Język netto null jest możliwe wartości i gdy użytkownik są współdziałanie z takich typów, kod F# mogą występować wartości null.

Dla typu, określone w F# i wykorzystywane wyłącznie od F#, jedynym sposobem utworzenia wartość null, bezpośrednio przy użyciu biblioteki F# jest użycie Unchecked.defaultof lub Array.zeroCreate.Jednakże w przypadku F# typu, który jest używany od innych.Języki netto, lub przy użyciu interfejsu API, który nie jest zapisywana w F#, na przykład używa się tego typu.NET Framework może występować wartości null.

Można użyć option typu F#, gdy zmienna odwołania może korzystać z możliwych wartości null w innym.Język netto.Zamiast wartości null z F# option typu, użyj wartości opcji None , jeśli nie ma żadnego obiektu.Użyj wartości opcji Some(obj) z obiektem obj , gdy znajduje się obiekt.Aby uzyskać więcej informacji, zobacz Opcje (F#).

null Słowo kluczowe jest prawidłowe słowo kluczowe w języku F# i trzeba go używać, gdy użytkownik pracuje z.NET Framework API lub innych interfejsów API, które są zapisywane w innym.Język netto.Są dwie sytuacje, w których może być konieczne wartość null, gdy wywołujemy.NET API i przekazać wartość null jako argument i gdy interpretuje wartość zwracana lub parametru wyjściowego z.Wywołanie metody netto.

Aby przekazać wartość null.Metoda netto, po prostu wykorzystania null słowa kluczowego w kod wywołujący.Poniższy przykład kodu ilustruje to.

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

Aby zinterpretować wartość null jest uzyskiwana z.Metoda netto, używaj dopasowania wzorca, jeśli to możliwe.Poniższy przykład kodu pokazuje, jak używać dopasowywania do wzorca interpretować wartość null, który jest zwracany z ReadLine podczas próby odczytu za końcem strumienia wejściowego.

// 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 ()

Wartości NULL dla typów F# również mogą być generowane w inny sposób, takie jak podczas używania Array.zeroCreate, który wzywa Unchecked.defaultof.Trzeba być ostrożnym z takiego kodu, aby zachować wartości null, kapsułowane.W bibliotece przeznaczone tylko dla F# nie mają Sprawdź, czy wartości null w każdej funkcji.Jeśli piszesz biblioteki dotyczących ich współdziałania z innymi.NET języków, może być konieczne dodać null sprawdza, czy wprowadzanie parametrów i zgłosić ArgumentNullException, tak jak w języku C# lub Visual Basic kodu.

Poniższy kod umożliwia sprawdzanie, czy arbitralną wartość jest null.

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

Zobacz też

Informacje

Wyrażenia dopasowania (F#)

Inne zasoby

Wartości (F#)