2021年12月21日
川俣晶の縁側ソフトウェアnew_C#入門・全キーワード明快解説! total 723 count

??演算子: null脱出の近道!!

Written By: 川俣 晶連絡先

この章のテーマ §

 null 合体演算子(??演算子)について学びます。null値は扱えない機能も多いやっかいな値ですが、容易に代理の値を指定できます。

前提知識 §

Console.WriteLineメソッド, 文字列の基礎, string?型

解説 §

 null 合体演算子(??演算子)は、ある値がnullの時、別の値を指定する機能を持ちます。

 たとえば、x ?? yは、xがnullではないとき、xの値のままです。しかし、xがnullのときはyの値になります。

 サンプルソースの場合、Console.WriteLineメソッドにnullを渡すと何も出力しませんがそれでは分かりにくいので、"(NULL)"を出力させています。

罠の数々 §

  • null値はC#のプログラムで不可避に入り込んでくる値であるが、多くの場合処理できない。null 合体演算子の出番は割と多い
  • 最近のC# はnull非許容がデフォルトであるが、これはnull値が絶対発生しないことを保証するわけではない。たとえば、型名の末尾に?を付けてnull許容を宣言してしまえば(サンプルソースのstiring?参照)、null値を入れられるからである。やはり、null 合体演算子は必要になる
  • x ??= yという書き方も可能である。xがnullの場合のみ、yの値に置き換えられる

参考リンク §

?? および ?? 演算子 (C# リファレンス)

サンプルソース: nullCoalescingOperator §

sub("Hello");

sub(null);

void sub(string? s)

{

    Console.WriteLine(s ?? "(NULL)");

}

実行結果 §

Hello

(NULL)

リポジトリ §

https://github.com/autumn009/CSharpPrimer2

練習問題 §

 以下のプログラムの実行結果を予測してみよう。

var x = 1;

var y = "SAMPLE";

y ??= (x++).ToString();

Console.WriteLine($"x={x} y={y}");

  1. x=1 y=1
  2. x=2 y=2
  3. x=1 y=SAMPLE
  4. x=2 y=SAMPLE
  5. x=1 y=(x++).ToString()

[[解答]]

単行本情報