Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Um tipoNullable<'T> de valor anulável representa qualquer tipo struct que também pode ser null. Isso é útil ao interagir com bibliotecas e componentes que podem optar por representar esses tipos de tipos, como inteiros, com um null valor por motivos de eficiência. O tipo subjacente que apoia essa construção é System.Nullable<T>.
Sintaxe
Nullable<'T>
Nullable value
Declarar e atribuir com valores
Declarar um tipo de valor anulável é como declarar qualquer tipo semelhante a um wrapper em F#:
open System
let x = 12
let nullableX = Nullable<int> x
Você também pode elidir o parâmetro de tipo genérico e permitir a inferência de tipo para resolvê-lo:
open System
let x = 12
let nullableX = Nullable x
Para atribuir a um tipo de valor anulável, você também precisará ser explícito. Não há conversão implícita para tipos de valor anulável definidos por F#:
open System
let mutable x = Nullable 12
x <- Nullable 13
Atribuir nulo
Não é possível atribuir null diretamente a um tipo de valor anulável. Utilize Nullable() em vez disso:
let mutable a = Nullable 42
a <- Nullable()
Isto porque Nullable<'T> não tem null como valor próprio.
Passar e atribuir aos membros
Uma diferença fundamental entre trabalhar com membros e valores F# é que os tipos de valor nulo podem ser inferidos implicitamente quando você está trabalhando com membros. Considere o seguinte método que usa um tipo de valor anulável como entrada:
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
No exemplo anterior, você pode passar 12 para o método M. Você também pode atribuir 12 à propriedade NVTauto . Se a entrada puder ser construída como um tipo de valor anulável e corresponder ao tipo de destino, o compilador F# converterá implicitamente tais chamadas ou atribuições.
Examinar uma instância de tipo de valor nulo
Ao contrário de Options, que são uma construção generalizada para representar um valor possível, os tipos de valor anulável não são usados com correspondência de padrões. Em vez disso, você precisa usar uma if expressão e verificar a HasValue propriedade.
Para obter o valor subjacente, use a Value propriedade após uma HasValue verificação, da seguinte forma:
open System
let a = Nullable 42
if a.HasValue then
printfn $"{a} is {a.Value}"
else
printfn $"{a} has no value."
Operadores anuláveis
Operações em tipos de valores anuláveis, como aritmética ou comparação, podem exigir o uso de operadores anuláveis.
Você pode converter de um tipo de valor nulo para outro usando operadores de conversão do FSharp.Linq namespace:
open System
open FSharp.Linq
let nullableInt = Nullable 10
let nullableFloat = Nullable.float nullableInt
Você também pode usar um operador não anulável apropriado para converter em um tipo primitivo, arriscando uma exceção se ela não tiver valor:
open System
open FSharp.Linq
let nullableFloat = Nullable 10.0
let standardFloat = float nullableFloat
printfn $"value is %f{float standardFloat}"
Você também pode usar operadores anuláveis como uma abreviação para verificar HasValue e Value:
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
A ?> comparação verifica se o lado esquerdo é anulável e só é bem-sucedida se tiver um valor. É equivalente à linha que se lhe segue.