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

Null 許容型は、System.Nullable<T> 構造体のインスタンスです。Nullable types are instances of the System.Nullable<T> struct. Null 許容型は、基になる値型の適切な範囲の値だけでなく、null 値も表すことができます。A nullable type can represent the correct range of values for its underlying value type, plus an additional null value. たとえば、Nullable<Int32> ("Null 許容の Int32" と読みます) には、-2147483648 ~ 2147483647 の範囲の任意の値または null 値を割り当てることができます。For example, a Nullable<Int32>, pronounced "Nullable of Int32," can be assigned any value from -2147483648 to 2147483647, or it can be assigned the null value. Nullable<bool> には、truefalse、または null の値を割り当てることができます。A Nullable<bool> can be assigned the values true, false, or null. 数値型と Boolean 型に null を割り当てる機能は、値が割り当てられていない可能性がある要素を含むデータベースとその他のデータ型を処理するときに特に役に立ちます。The ability to assign null to numeric and Boolean types is especially useful when you are dealing with databases and other data types that contain elements that may not be assigned a value. たとえば、データベースの Boolean フィールドには、値 true または false が格納されている可能性がありますが、未定義である可能性もあります。For example, a Boolean field in a database can store the values true or false, or it may be undefined.

using System;

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

      // Is the HasValue property true?
      if (num.HasValue)
          Console.WriteLine("num = " + num.Value);
          Console.WriteLine("num = Null");

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

      // num.Value throws an InvalidOperationException if num.HasValue is false
          y = num.Value;
      catch (InvalidOperationException e)
// The example displays the following output:
//       num = Null
//       Nullable object must have a value.

その他の例については、「Null 許容型の使用」を参照してくださいFor more examples, see Using Nullable Types

Null 許容型の概要Nullable Types Overview

Null 許容型には次の特性があります。Nullable types have the following characteristics:

  • Null 許容型は、null値を割り当てることができる、値型の変数を表します。Nullable types represent value-type variables that can be assigned the value of null. 参照型に基づいた Null 許容型は作成できません You cannot create a nullable type based on a reference type. (参照型は既に null 値をサポートしています)。(Reference types already support the null value.)

  • 構文 T? は、Nullable<T> の省略表現です。ここで、T は値型です。The syntax T? is shorthand for Nullable<T>, where T is a value type. この 2 つの形式は同義であり、どちらでも使用できます。The two forms are interchangeable.

  • Null 許容型に値を割り当てる方法は、通常の値型の場合と同じです。たとえば、int? x = 10;double? d = 4.108; と指定します。Assign a value to a nullable type just as you would for an ordinary value type, for example int? x = 10; or double? d = 4.108;. Null 許容型には、値 null も割り当てることができます。たとえば、int? x = null; と指定します。A nullable type can also be assigned the value null: int? x = null;.

  • 割り当てられた値、または値が null の場合に基になる型の既定値を返すには、Nullable<T>.GetValueOrDefault メソッドを使用します。たとえば、int j = x.GetValueOrDefault(); と指定します。Use the Nullable<T>.GetValueOrDefault method to return either the assigned value, or the default value for the underlying type if the value is null, for example int j = x.GetValueOrDefault();

  • null かどうかを確認して値を取得するには、HasValueValue の読み取り専用プロパティを使用します。たとえば、if(x.HasValue) j = x.Value; と指定します。Use the HasValue and Value read-only properties to test for null and retrieve the value, as shown in the following example: if(x.HasValue) j = x.Value;

    • HasValue プロパティは、変数に値が含まれる場合は true を返し、null の場合は false を返します。The HasValue property returns true if the variable contains a value, or false if it is null.

    • Value プロパティは、値が割り当てられていれば、その値を返します。The Value property returns a value if one is assigned. それ以外の場合は、System.InvalidOperationException がスローされます。Otherwise, a System.InvalidOperationException is thrown.

    • HasValue の既定値は false です。The default value for HasValue is false. Valueプロパティには既定値はありません。The Value property has no default value.

    • Null 許容型では == 演算子と != 演算子も使用できます。たとえば、if (x != null) y = x; のように指定します。You can also use the == and != operators with a nullable type, as shown in the following example: if (x != null) y = x;

  • 現在の値が null である Null 許容型が Null 許容型以外の型に割り当てられるときに適用される既定値を割り当てるには、?? 演算子を使用します。たとえば、int? x = null; int y = x ?? -1; と指定します。Use the ?? operator to assign a default value that will be applied when a nullable type whose current value is null is assigned to a non-nullable type, for example int? x = null; int y = x ?? -1;

  • 入れ子になった Null 許容型は許可されません。Nested nullable types are not allowed. 次の行はコンパイルされません。Nullable<Nullable<int>> n;The following line will not compile: Nullable<Nullable<int>> n;

詳細情報For more information:

C# 言語仕様C# Language Specification

詳細については、「C# 言語の仕様」を参照してください。For more information, see the C# Language Specification. 言語仕様は、C# の構文と使用法に関する信頼性のある情報源です。The language specification is the definitive source for C# syntax and usage.

参照See Also

C# プログラミング ガイドC# Programming Guide
C# リファレンスC# Reference
What Exactly Does 'Lifted' mean? ('Lifted' の正確な意味)What exactly does 'lifted' mean?