RSS

C#: Nullable (null 許容型)

27 4月

値型 T に対して型 T? は値だけでなく null も取ることができる。

T? は Nullable<T> の Alias である。

null 許容型の使用例を以下に示す。

// Nullable

// println() 関数
Action<Object> println = o => Console.WriteLine(o.ToString());

Console.WriteLine("<< Nullable >>");

// int? と Nullble<int> は同じ。
int? a0 = 1;
Nullable<int> a1 = a0;
// 次のような代入はコンパイルエラーになる。
// int b = a0;

// Nullable.HasValue : その値が null かどうか判別
println(a1.HasValue);  // true
a1 = null;
println(a1.HasValue);  // false

// int? から int への変換: int をキャストする。
if (a0.HasValue)
{
  println((int)a0);
}

// Nullable<T> も演算可能だが、 値が null だった場合の結果は演算により異なる。
a1 = 2;
println(a0 + a1);

// null 合体演算子 (??) : 値が null かどうかを判別し、null の場合には別の値を割り当てる演算子
int? a2 = 4;
a2 = a2 ?? 5;  // a2 は null でないので何もしない。
if (a2.HasValue == false)
  println("null");
else
  println(a2);
a2 = null;
a2 = a2 ?? 7;  // a2 は null なので代わりに 7 になる。
// ??= を使うと 前のような if 文が簡単になる。 下の例では null だったときは 0 が表示される。
println(a2 ??= 0);
 
コメントする

投稿者: : 2024/04/27 投稿先 C#, dotNET

 

コメントを残す