Nullable 값 형식

nullable 값 형식 Nullable<'T>또한 될 수 있는 모든 null체 형식을 나타냅니다. 이는 효율성상의 이유로 정수와 같은 이러한 형식을 나타내도록 선택할 수 있는 라이브러리 및 구성 요소와 null 상호 작용할 때 유용합니다. 이 구문을 백업하는 기본 형식은 .입니다 System.Nullable<T>.

구문

Nullable<'T>
Nullable value

값을 사용하여 선언 및 할당

nullable 값 형식을 선언하는 것은 F#에서 래퍼와 유사한 형식을 선언하는 것과 같습니다.

open System

let x = 12
let nullableX = Nullable<int> x

제네릭 형식 매개 변수를 제거하고 형식 유추를 허용하여 해결할 수도 있습니다.

open System

let x = 12
let nullableX = Nullable x

nullable 값 형식에 할당하려면 명시적이어야 합니다. F#정의 nullable 값 형식에 대한 암시적 변환은 없습니다.

open System

let mutable x = Nullable 12
x <- Nullable 13

null 할당

nullable 값 형식에 직접 할당 null 할 수 없습니다. 대신 다음을 사용합니다 Nullable() .

let mutable a = Nullable 42
a <- Nullable()

적절한 값이 없기 Nullable<'T> 때문 null 입니다.

멤버에 전달 및 할당

멤버 작업과 F# 값의 주요 차이점은 멤버로 작업할 때 nullable 값 형식을 암시적으로 유추할 수 있다는 점입니다. nullable 값 형식을 입력으로 사용하는 다음 메서드를 고려합니다.

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

이전 예제에서는 메서드12에 전달할 M 수 있습니다. 자동 속성12에 할당 NVT 할 수도 있습니다. 입력을 nullable 값 형식으로 생성할 수 있고 대상 형식과 일치하는 경우 F# 컴파일러는 이러한 호출 또는 할당을 암시적으로 변환합니다.

nullable 값 형식 인스턴스 검사

가능한 값을 나타내는 일반화된 구문인 Options와 달리 nullable 값 형식은 패턴 일치와 함께 사용되지 않습니다. 대신 식을 사용하고 if 속성을 확인해야 HasValue 합니다.

기본 값을 얻으려면 다음과 같이 검사 후 Value 속성을 사용합니다HasValue.

open System

let a = Nullable 42

if a.HasValue then
    printfn $"{a} is {a.Value}"
else
    printfn $"{a} has no value."

null 허용 연산자

산술 또는 비교와 같은 nullable 값 형식에 대한 작업을 수행하려면 nullable 연산자를 사용해야 할 수 있습니다.

네임스페이스의 변환 연산 FSharp.Linq 자를 사용하여 nullable 값 형식을 다른 형식으로 변환할 수 있습니다.

open System
open FSharp.Linq

let nullableInt = Nullable 10
let nullableFloat = Nullable.float nullableInt

nullable이 아닌 적절한 연산자를 사용하여 기본 형식으로 변환할 수도 있습니다. 값이 없는 경우 예외가 발생할 수 있습니다.

open System
open FSharp.Linq

let nullableFloat = Nullable 10.0
let standardFloat = float nullableFloat

printfn $"value is %f{float standardFloat}"

nullable 연산자를 검사 및 다음을 위한 간단한 작업으로 사용할 수도 있습니다.HasValueValue

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

비교는 ?> 왼쪽이 null을 허용하고 값이 있는 경우에만 성공하는지 확인합니다. 뒤에 있는 줄과 동일합니다.

참고 항목