LoginSignup
0
0

More than 1 year has passed since last update.

C#の基本イディオムについてその3~三項演算子・null合体演算子~

Posted at

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 && "ユーザー";

と書くことができる。

参考記事

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0