ひとりでのアプリ開発 - fineの備忘録 -

ひとりでアプリ開発をするなかで起こったことや学んだことを書き溜めていきます

C# - null 許容型(Nullable型)

初めに

 C# には、通常の値と null がとれる型が欲しい場合のために null 許容型が存在します。本記事では、null 許容型について、まとめます。

null 許容型

 null 許容型とは、元の型の値または null の値を取れる型のことです。C# では、通常の型の後ろに ? をつけることで null 許容型にすることができます。

// 型の後ろに ? をつけるだけ
int? nullableInt = null;
string? nullableString = null;
bool? nullableBool = null;
使うタイミング

 null である状況を明示的に扱う必要がある場合に使います。例えば、

  • データベースからのデータ取得
  • メソッドの戻り値
  • 初期値の設定
  • メソッドの引数

などが挙げられます。

null 合体演算子(null coalescing operator)??

 ?? を null 合体演算子といいます。

result = nullableValue ?? defaultValue;

 このとき、nullableValue が null でない場合は nullableValue の値が、nullの場合は defaultValue の値が result に代入されます。

int? value1 = null;
int? value2 = 20;
int result = value1 ?? value2 ?? 30; // value1がnullならば、value2をチェックし、どちらもnullなら30が代入される
null 合体演算子の書き換え

 null 合体演算子三項演算子を使って書き換えることができます。

// 下の二つの式は同じ
int? z = x ?? y; 
int? z = x != null ? x : y

null 合体代入演算子 ??=

 C# 8.0 から null 合体代入が使えるようになりました。

 null合体代入演算子は、変数がnullである場合のみ代入を行い、変数が既に値を持っている場合には代入をスキップします。

// variable が null の場合のみ, value が代入される
variable ??= value;