NULL許容型の定義とNULLチェックのまとめ
恥ずかしながらC#でNULL許容型の定義やNULLチェックの方法が今一つ整理できていなかったので、メモとしてまとめておきます。
目次
- NULL許容型の定義
- NULLチェックの方法
- 参考リンク
NULL許容型の定義
通常intやdoubleのようなプリミティブ型にnullを設定することはできず、リクエストやDBから取得してきたデータを表示する際にnullとして処理したいのに...といってもどかしい気持ちになることがありますが、最近はNULL許容型として処理することが可能です。
変数をNULL許容型として宣言する方法は以下の通り。
int? a = null;
double? b = null;
bool? c = null;
通常の型(int、double、boolなど)の後ろに「?」をつけて宣言すると、宣言された変数はNullable(NULL許容)型として定義され、値にnullをセットすることが可能になります。
NULLチェックの方法
上記のNullable型のNULLチェックや値がセットされているかどうか判定する方法は以下の通り。
int? a = null;
if(a == null){
Console.WriteLine("null");
}
if(!a.HasValue){
Console.WriteLine("null");
}
チェック対象の変数がNULLだった際に代わりの値をセットするようなコードを簡潔に書く場合、null合体演算子「??」を使います。
int? a = null;
int aa = a ?? 0;
上記の場合、aがNULLならaaには0がセットされます。
プロパティにアクセスする際にモデル自体が空かどうかチェックするには、null条件演算子(?.)を使います。
var name = customer?.Name;
通常はcustomerがnullの時にNameにアクセスしようとするとエラーになりますが、上記の場合、customerがnullの時点で変数にnullが設定されます。
null合体演算子やnull条件演算子は、コードをより少なく記述するために利用されます。最近はよく見かけるようになりました。
私は最初、null条件演算子(null conditional operator)をなんというワードで検索したら該当する記事がヒットするのか分からずに結構探しました。「?」で短くかけるのは有難いですが、この書き方がなにを意味するのか探しにくいのはちょっと考え物ですね。