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

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

using System;

class NullableExample
{
  static void Main()
  {
      int? num = null;

      // Is the HasValue property true?
      if (num.HasValue)
      {
          Console.WriteLine("num = " + num.Value);
      }
      else
      {
          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 (InvalidOperationException e)
      {
         Console.WriteLine(e.Message);
      }
   }
}
// The example displays the following output:
//       num = Null
//       Nullable object must have a value.

その他の例については、「Null 許容型の使用」を参照してください

Null 許容型の概要

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

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

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

  • Null 許容型に値を割り当てる方法は、通常の値型の場合と同じです。たとえば、int? x = 10;double? d = 4.108 と指定します。 Null 許容型には、値 null も割り当てることができます。たとえば、int? x = null. と指定します。

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

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

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

    • Value プロパティは、値が割り当てられていれば、その値を返します。 それ以外の場合は、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# プログラミング ガイド
C#
C# リファレンス
What Exactly Does 'Lifted' mean? ('Lifted' の正確な意味)