C# の Nullable 型

C# の値型と参照型

C# のデータ型は大きく分けて、値型 (value type) と参照型 (reference type) に分けられます。

値型は単に値を保持するだけものものです。int や float などのプリミティブデータ型は値型です。

一方、参照型はオブジェクトを指し示すための変数です。オブジェクトがメモリ上に作成された時に、 メモリ上の場所を表します。参照型の変数にまだ、指し示すオブジェクトが指定されていない状態の時に null という値になります。

C# の Nullable 型

C# は値型の型に ? を付けることで、 null となることができる型にすることができます。これを Nullable 型といいます。

int? m = null;
m = 10;
Console.WriteLine($"m={m}"); // m=10

int 型の他にも同様に、 ? を付けることで Nullable 型にできます。

C# の Nullable<T> 構造体

型名に ? を付けた、 T? は Nullable<T> 構造体として作成されます。

Nullable<int> m = null; // int? m = null

Nullable<T> 構造体は Value プロパティや HasValue プロパティを持っています。

Value プロパティではセットされた値を返します。 HasValue プロパティは値がセットされている時に true、セットされていない時に false を返します。

int? m = null;
//m = 10;
if (m.HasValue) // m != null
{
  Console.WriteLine($"m={m}");
}
else
{
  Console.WriteLine("no value assigned");
}

Nullable の変数に値がセットされているかどうかは、必ずしも HasValue プロパティをチェックする必要はなく、 == 演算子や != 演算子を用いて null であるかチェックできます。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 C# 入門