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

Null 許容型は、System.Nullable<T> 構造体のインスタンスです。Nullable types are instances of the System.Nullable<T> struct. Null 許容型は、基になる型 T のすべての値と、追加の null 値を表すことができます。Nullable types can represent all the values of an underlying type T, and an additional null value. 基になる型 T は Null 非許容のあらゆる値の型にすることができます。The underlying type T can be any non-nullable value type. T を参照型にすることはできません。T cannot be a reference type.

たとえば、null または Int32.MinValue から Int32.MaxValue のいずれかの整数値を Nullable<int> および truefalse に、または nullNullable<bool> に割り当てることができます。For example, you can assign null or any integer value from Int32.MinValue to Int32.MaxValue to a Nullable<int> and true, false, or null to a Nullable<bool>.

Null 許容型は基になる型の未定義の値を表す必要があるときに使用します。You use a nullable type when you need to represent the undefined value of an underlying type. ブール値変数は true と false の 2 つの値しか持つことができません。A Boolean variable can have only two values: true and false. "未定義の" 値はありません。There is no "undefined" value. 多くのプログラミング アプリケーションの中でも特にデータベース操作では、変数値が未定義か、ない場合があります。In many programming applications, most notably database interactions, a variable value can be undefined or missing. たとえば、データベース フィールドには、true や false の値が入力されている場合や、値がまったく入力されていない場合があります。For example, a field in a database may contain the values true or false, or it may contain no value at all. その場合は、Nullable<bool> 型を使用します。You use a Nullable<bool> type in that case.

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

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

  • 構文 T?Nullable<T> の短縮形です。The syntax T? is shorthand for Nullable<T>. この 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 underlying value type: int? x = 10; or double? d = 4.108;. null 値を int? x = null; のように割り当てることもできます。You also can assign the null value: int? x = null;.

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

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

    • Value プロパティは、HasValuetrue が返される場合に値を返します。The Value property returns a value if HasValue returns true. それ以外の場合は、InvalidOperationException がスローされます。Otherwise, an InvalidOperationException is thrown.

  • Null 許容型では == 演算子と != 演算子も使用できます。たとえば、if (x != null) y = x.Value; のように指定します。You can also use the == and != operators with a nullable type, as shown in the following example: if (x != null) y = x.Value;. ab の両方が null の場合、a == btrue と評価されます。If a and b are both null, a == b evaluates to true.

  • C# 7.0 以降では、パターン マッチングを使用して Null 許容型の値を調べて取得することができます (if (x is int valueOfX) y = valueOfX;)。Beginning with C# 7.0, you can use pattern matching to both examine and get a value of a nullable type: if (x is int valueOfX) y = valueOfX;.

  • T? の既定値は HasValue プロパティが false を返すインスタンスです。The default value of T? is an instance whose HasValue property returns false.

  • Null 許容型の値が null である場合に、基になる値の型の割り当てられた値、または既定値のどちらかを返すには、GetValueOrDefault() メソッドを使用します。Use the GetValueOrDefault() method to return either the assigned value, or the default value of the underlying value type if the value of the nullable type is null.

  • Null 許容型の値が null である場合に、割り当てられた値、または指定された既定値のどちらかを返すには、GetValueOrDefault(T) メソッドを使用します。Use the GetValueOrDefault(T) method to return either the assigned value, or the provided default value if the value of the nullable type is null.

  • Null 許容型の値に基づいて基になる型の値に値を割り当てるには、int? x = null; int y = x ?? -1;のように null- 結合演算子 ?? を使用します。Use the null-coalescing operator, ??, to assign a value to an underlying type based on a value of the nullable type: int? x = null; int y = x ?? -1;. 例では、x が null であるため、y の結果値は -1 です。In the example, since x is null, the result value of y is -1.

  • 2 つのデータ型の間でユーザー定義の変換を定義している場合は、これらのデータ型の Null 許容バージョンを使用して、同じユーザー定義変換を実行することもできます。If a user-defined conversion is defined between two data types, the same conversion can also be used with the nullable versions of these data types.

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

詳細については、「Null 許容型の使用 (C# プログラミング ガイド)」と「方法: Null 許容型を識別する (C# プログラミング ガイド)」を参照してください。For more information, see the Using nullable types and How to: Identify a nullable type topics.

参照See Also