null 許容型 (C# プログラミング ガイド)
null 許容型は、System.Nullable<T> 構造体のインスタンスです。 null 許容型は、基礎となる値型の正しい範囲の値だけでなく、null 値も表すことができます。 たとえば、Nullable<Int32> ("Int32 の Nullable" と読みます) には、-2147483648 から 2147483647 の任意の値、または null 値を割り当てることができます。 Nullable<bool> には、true、false、または 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 をテストし値を取得するには、次の例に示すように、HasValue と Value の読み取り専用プロパティを使用します。たとえば、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# の構文と使用法に関する信頼性のある情報源です。