null 許容型 (C# プログラミング ガイド)

更新 : 2007 年 11 月

null 許容型は、System.Nullable<T> 構造体のインスタンスです。null 許容型は、基礎となる値型の正しい範囲の値だけでなく、null 値も表すことができます。たとえば、Nullable<Int32> ("Int32 の Nullable" と読みます) には、-2147483648 から 2147483647 の任意の値、または null 値を割り当てることができます。Nullable<bool> には、truefalse、または null の値を割り当てることができます。数値型と Boolean 型に null を割り当てる機能が便利なのは、値を割り当てられていない可能性がある要素を含むデータベースや他のデータ型を処理するときです。たとえば、データベースの Boolean フィールドには、値 true または false を格納するか、未定義にすることが可能です。

class NullableExample
{
    static void Main()
    {
        int? num = null;
        if (num.HasValue == true)
        {
            System.Console.WriteLine("num = " + num.Value);
        }
        else
        {
            System.Console.WriteLine("num = Null");
        }

        // y is set to zero
        int y = num.GetValueOrDefault();

        // num.Value throws an InvalidOperationException if num.HasValue is false
        try
        {
            y = num.Value;
        }
        catch (System.InvalidOperationException e)
        {
            System.Console.WriteLine(e.Message);
        }
    }
}

この例は次の出力を表示します。

num = Null

Nullable object must have a value.

null 許容型の概要

null 許容型には次の特性があります。

  • null 許容型は、null の値を割り当てることができる、値型の変数を表します。参照型に基づいた null 許容型は作成できません (参照型では null 値が既にサポートされています)。

  • 構文 T? は、Nullable<T> の省略表現です。ここで、T は値型です。この 2 つの形式はどちらでも使用できます。

  • null 許容型に値を割り当てる方法は、int? x = 10; や double? d = 4.108; など、通常の値型と同様です。

  • 値が null である場合、割り当てられた値または基礎となる型の既定値を返すには、Nullable<T>.GetValueOrDefault メソッドを使用します。たとえば、 int j = x.GetValueOrDefault(); と指定します。

  • null をテストし、値を取得するには、HasValueValue の読み取り専用プロパティを使用します。たとえば、if(x.HasValue) j = x.Value; と指定します。

    • HasValue プロパティは、変数に値が含まれる場合は true を返し、null の場合は false を返します。

    • Value プロパティは、値が割り当てられている場合はその値を返します。それ以外の場合は、System.InvalidOperationException がスローされます。

    • null 許容型の変数の既定値では、HasValue が false に設定されています。Value は未定義です。

  • 現在の値が null である null 許容型に、null 非許容型を割り当てる場合、既定値を割り当てるには、?? 演算子を使用します。たとえば、int? x = null; int y = x ?? -1; と指定します。

  • 入れ子になった null 許容型は許可されていません。Nullable<Nullable<int>> n; の行はコンパイルされません。

関連項目

詳細情報

C# 言語仕様

詳細については、「C# 言語仕様」の次のセクションを参照してください。

  • 4.1.10 Null 許容型

参照

処理手順

null 許容のサンプル

概念

C# プログラミング ガイド

参照

Nullable

その他の技術情報

Visual C#

C# リファレンス

What exactly does 'lifted' mean?