18
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

C# の null条件演算子 null合体演算子の使用例メモ

Last updated at Posted at 2020-06-10

null なんちゃら演算子の使い方がいつも迷うので、自分用に超簡単メモφ(..)
(オブジェクトや変数の型の明示とか省略)

null条件演算子【 ?. 】

var name = person?.name;

personnull の場合は namenull
personnull でない場合のみ person.name を返す。
これは下記のコードと等価。

var name = "";
if (person == null)
  name = null;
else
  name = person.name;

null合体演算子【 ?? 】

var name = personName ?? "personName is null";

personNamenull の場合でも name に 何か ("personName is null") 代入したい。
personNamenull でない場合は、namepersonName がそのまま代入される。
これは下記のコードと等価。

var name = "";
if (personName == null)
  name = "personName is null";
else
  name = personName;

null条件演算子 と null合体演算子 の合わせ技

とあるオブジェクトのメンバ変数を取得したいけど、もしそのオブジェクトが null だった場合に既定値をぶち込む、的な用途に使うといい感じっぽい。

var name = person?.name ?? "person is null";

personnull の時、person?.namenull なので ?? の右側が評価される)
これは下記のコードと等価

var name = "";
if (person == null)
  name = "person is null";
else
  name = person.name;

※ 2020/06/12 追記
コメントにてご指摘頂きましたので追記します。
上記コードで personnull ではないが person.namenull の場合も person is null が返りますね。
できるだけシンプルに解釈できるようにサラッと書いてしまったので不正確でした。
等価コードは下記のような感じでしょうか。

var name = "";
if (person != null && person.name != null)
  name = person.name;
else
  name = "person or person.name is null";

参考にさせていただい記事

いつも有難うございます。

18
15
1

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
18
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?