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

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 許容型の使用 (C# プログラミング ガイド)」を参照してください。

null 許容型の概要

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

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

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

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

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

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

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

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

    • HasValue の既定値は false です。 Value プロパティには既定値がありません。

    • null 許容型では、if (x != null) y = x; のように、== 演算子と != 演算子を使用することもできます。

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

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

関連項目

詳細情報

C# 言語仕様

詳細については、「C# 言語仕様」を参照してください。 言語仕様は、C# の構文と使用法に関する信頼性のある情報源です。

参照

参照

Nullable

概念

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

その他の技術情報

Visual C#

C# リファレンス

What exactly does 'lifted' mean? (「リフト」の正確な意味)