Share via


Opzioni Value

Il tipo di opzione valore in F# viene usato quando si trovano le due circostanze seguenti:

  1. Uno scenario è appropriato per un'opzione F#.
  2. L'uso di uno struct offre un vantaggio sulle prestazioni nello scenario in uso.

Non tutti gli scenari sensibili alle prestazioni vengono "risolti" usando struct. È necessario considerare il costo aggiuntivo per la copia quando vengono usati anziché i tipi di riferimento. Tuttavia, i programmi F# di grandi dimensioni creano in genere un'istanza di molti tipi facoltativi che passano attraverso percorsi ad accesso frequente e, in questi casi, gli struct possono spesso produrre prestazioni complessive migliori nel corso della durata di un programma.

Definizione

Value Option è definito come unione discriminante struct simile al tipo di opzione di riferimento. La definizione può essere considerata in questo modo:

[<StructuralEquality; StructuralComparison>]
[<Struct>]
type ValueOption<'T> =
    | ValueNone
    | ValueSome of 'T

Value Option è conforme all'uguaglianza strutturale e al confronto. La differenza principale è che il nome compilato, il nome del tipo e i nomi maiuscoli indicano tutti che si tratta di un tipo di valore.

Uso delle opzioni valore

Le opzioni valore vengono usate esattamente come Opzioni. ValueSome viene usato per indicare che è presente un valore e ValueNone viene usato quando un valore non è presente:

let tryParseDateTime (s: string) =
    match System.DateTime.TryParse(s) with
    | (true, dt) -> ValueSome dt
    | (false, _) -> ValueNone

let possibleDateString1 = "1990-12-25"
let possibleDateString2 = "This is not a date"

let result1 = tryParseDateTime possibleDateString1
let result2 = tryParseDateTime possibleDateString2

match (result1, result2) with
| ValueSome d1, ValueSome d2 -> printfn "Both are dates!"
| ValueSome d1, ValueNone -> printfn "Only the first is a date!"
| ValueNone, ValueSome d2 -> printfn "Only the second is a date!"
| ValueNone, ValueNone -> printfn "None of them are dates!"

Come per Options, la convenzione di denominazione per una funzione che restituisce ValueOption consiste nel anteporre il prefisso con try.

Proprietà e metodi dell'opzione Value

Al momento è disponibile una proprietà per Opzioni valore: Value. Un InvalidOperationException oggetto viene generato se non è presente alcun valore quando questa proprietà viene richiamata.

Funzioni di opzione valore

Il ValueOption modulo in FSharp.Core contiene funzionalità equivalenti al Option modulo. Esistono alcune differenze nel nome, ad esempio defaultValueArg:

val defaultValueArg : arg:'T voption -> defaultValue:'T -> 'T

Questa operazione funziona esattamente come defaultArg nel Option modulo, ma opera invece su un'opzione valore.

Vedi anche