다음을 통해 공유


Null 값

이 항목에서는 F#에서 null 값을 사용하는 방법을 설명합니다.

Null 값

Null 값은 일반적으로 F#에서 값 또는 변수에 사용되지 않습니다. 그러나 null은 특정 상황에서 비정상적인 값으로 나타납니다. 형식이 F#에 정의된 경우 AllowNullLiteral 특성이 형식에 적용되지 않는 한 null은 일반 값으로 허용되지 않습니다. 형식이 다른 .NET 언어로 정의된 경우 null은 가능한 값이며 이러한 형식과 상호 운용하는 경우 F# 코드에 null 값이 발생할 수 있습니다.

F#에서 정의되고 F#에서 엄격하게 사용되는 형식의 경우 F# 라이브러리를 사용하여 null 값을 직접 만드는 유일한 방법은 Un검사ed.defaultof 또는 Array.zeroCreate를 사용하는 것입니다. 그러나 다른 .NET 언어에서 사용되는 F# 형식의 경우 또는 .NET Framework와 같이 F#으로 작성되지 않은 API와 함께 해당 형식을 사용하는 경우 null 값이 발생할 수 있습니다.

다른 .NET 언어에서 가능한 null 값이 있는 참조 변수를 사용할 수 있는 경우 F#에서 형식을 사용할 option 수 있습니다. F# option 형식을 사용하여 null 대신 개체가 없는 경우 옵션 값을 None 사용합니다. 개체가 있는 경우 개체 obj 와 함께 옵션 값을 Some(obj) 사용합니다. 자세한 내용은 옵션을 참조하세요. 값이 옵션에 포함된 경우 xSome x값은 계속 압축 null 할 수 있습니다null. 이 때문에 값이 .일 때 사용하는 None 것이 중요합니다 null.

null 키워드(keyword) F#의 유효한 키워드(keyword) .NET Framework API 또는 다른 .NET 언어로 작성된 다른 API로 작업할 때 사용해야 합니다. null 값이 필요할 수 있는 두 가지 상황은 .NET API를 호출하고 null 값을 인수로 전달하는 경우와 .NET 메서드 호출에서 반환 값 또는 출력 매개 변수를 해석할 때입니다.

null 값을 .NET 메서드에 전달하려면 호출 코드에서 null 키워드(keyword) 사용합니다. 다음 코드 예제에서는 그 구체적인 방법을 보여 줍니다.

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

.NET 메서드에서 가져온 null 값을 해석하려면 가능한 경우 패턴 일치를 사용합니다. 다음 코드 예제에서는 패턴 일치를 사용하여 입력 스트림의 끝을 지나서 읽으려고 할 때 반환 ReadLine 되는 null 값을 해석하는 방법을 보여 줍니다.

// 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# 형식에 대한 Null 값은 사용하는 Array.zeroCreate경우와 같이 호출 Unchecked.defaultof하는 다른 방법으로 생성될 수도 있습니다. null 값을 캡슐화 상태로 유지하려면 이러한 코드에 주의해야 합니다. F#용 라이브러리에서는 모든 함수에서 null 값에 대해 검사 필요가 없습니다. 다른 .NET 언어와의 상호 운용을 위해 라이브러리를 작성하는 경우 C# 또는 Visual Basic 코드와 마찬가지로 null 입력 매개 변수에 대한 검사 추가하고 throwArgumentNullException해야 할 수 있습니다.

다음 코드를 사용하여 임의의 값이 null인지 검사 수 있습니다.

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

참고 항목