null 許容型 (C# プログラミング ガイド)
更新 : 2007 年 11 月
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 許容型の概要
null 許容型には次の特性があります。
null 許容型は、null の値を割り当てることができる、値型の変数を表します。参照型に基づいた null 許容型は作成できません (参照型では null 値が既にサポートされています)。
構文 T? は、Nullable<T> の省略表現です。ここで、T は値型です。この 2 つの形式はどちらでも使用できます。
null 許容型に値を割り当てる方法は、int? x = 10; や double? d = 4.108; など、通常の値型と同様です。
値が null である場合、割り当てられた値または基礎となる型の既定値を返すには、Nullable<T>.GetValueOrDefault メソッドを使用します。たとえば、 int j = x.GetValueOrDefault(); と指定します。
null をテストし、値を取得するには、HasValue と Value の読み取り専用プロパティを使用します。たとえば、if(x.HasValue) j = x.Value; と指定します。
HasValue プロパティは、変数に値が含まれる場合は true を返し、null の場合は false を返します。
Value プロパティは、値が割り当てられている場合はその値を返します。それ以外の場合は、System.InvalidOperationException がスローされます。
null 許容型の変数の既定値では、HasValue が false に設定されています。Value は未定義です。
現在の値が null である null 許容型に、null 非許容型を割り当てる場合、既定値を割り当てるには、?? 演算子を使用します。たとえば、int? x = null; int y = x ?? -1; と指定します。
入れ子になった null 許容型は許可されていません。Nullable<Nullable<int>> n; の行はコンパイルされません。
関連項目
詳細情報
C# 言語仕様
詳細については、「C# 言語仕様」の次のセクションを参照してください。
- 4.1.10 Null 許容型