C#での三項演算子(条件演算子)とnull合体演算子についてまとめてみた。
三項演算子とは
三項演算子とは、「(条件) ? (trueの場合の値) : (falseの場合の値) 」のように値を書く公式みたいなものである。
(例)japaneseというstring型の値が"はい"だった場合に"Yes"、そうじゃない場合に"No"を返すenglishという変数を定義したい場合
val english = japanese == "はい" ? "Yes" : "No";
三項演算子を使う場合は、コードが複雑にならないように、単純な値にすること。
判定する値がnullかどうかを判定し、nullじゃなかったら何らかの値を返したい場合
(例)nameというstring型の値が"ジョルノ・ジョバーナ"という値だったときに、"黄金の風"というstring型の値を返すが、そのnameがnullの場合もあることを考慮したい場合、
string? name = "ジョルノ・ジョバーナ";
return name ?? "黄金の風";
と書くことができる。(この場合は、nameがnullじゃないので、"黄金の風"を返す)
string? name = nulll;
return name ?? "黄金の風";
(この場合は、nameがnullなので、ただ単にnullを返す。)
null条件演算子(C#6.0以降で使用可能。)
(例)
データベースにUserというテーブルが存在し、そのUserをIdで検索してユーザーが存在していた場合に、そのUserの名前を返したい場合、
データベースを参照するコードが書かれているとして、
private UserContext db = new UserContext();
が宣言されていて、dbのテーブルが参照できるようになっているとし、
そのUserのモデルが
・Id(int型)
・Name(string型)
だとする。
var loginUser = db.Users.Find(id);
var returnData = loginUser?.Name;
と三項演算子をさらに省略し、nullかどうかを判定する変数名の後ろに「?」をつけ、その後に「.」でアクセスするプロパティを書くことができる。
こうすることで、loginUserがnullであればnullを返し、そうじゃなければ、Nameプロパティを返す。
null条件演算子・合体演算子を組み合わせることもできる
(例)
UserからFindメソッドでデータを検索する際に、見つからなかったら、"ユーザー"というstring型の値を返したい場合
var loginUser = db.Users.Find(id);
var returnData = loginUser?.Name && "ユーザー";
と書くことができる。
参考記事