本文へスキップ
BecomeCoder

C#文法コース · 第6章 例外処理とnull安全 · レッスン50

null条件演算子とnull合体演算子

ブラウザで完結

導入

nullチェックをifで毎回書くのは冗長です。?.(null条件演算子)と??(null合体演算子)を使うと、nullの扱いを1行で安全に書けます。

図解

flowchart LR
    A["user?.Name"] -->|user が null なら| N1["結果も null(例外にならない)"]
    A -->|user があれば| N2["Name を取得"]
    B["name ?? "名無し""] -->|name が null なら| D[""名無し" を使う"]
    B -->|name があれば| V["name をそのまま使う"]

サンプル

string? input = null;

// ?? : 左が null なら右の既定値を使う(null合体演算子)
string name = input ?? "名無し";
Console.WriteLine(name);   // 名無し

// ?. : 左が null なら、メソッド/プロパティにアクセスせず null を返す(例外を防ぐ)
string? text = null;
int? length = text?.Length;    // text が null なので length も null(例外にならない)
Console.WriteLine(length ?? 0);   // 0

// 組み合わせ: null なら 0 文字扱い
string? maybe = "hello";
Console.WriteLine(maybe?.Length ?? 0);   // 5
  • ??(null合体): A ?? B は「AがnullでなければA、nullならB」
  • ?.(null条件): x?.Member は「xがnullなら、アクセスせずnullを返す」——NullReferenceExceptionを防ぐ
  • ?.??を組み合わせると「nullなら既定値」を簡潔に書ける

演習

string? username = null;

// TODO: ?? を使って、username が null なら "ゲスト" を表示名 display に入れて出力してください
___
  • 期待される出力: ゲスト
ヒント1を見る

string display = username ?? "ゲスト";

ヒント2を見る

Console.WriteLine(username ?? "ゲスト");

まとめ

  • ??は「nullなら既定値」を1行で書ける
  • ?.は「nullならアクセスせずnull」を返し、例外を防ぐ
  • 2つを組み合わせるとnull処理が簡潔で安全になる

次章: エラーメッセージを読み解き、バグを突き止める「エラーとデバッグ」へ進みます。

実際に動かしてみよう

本文のサンプルや演習のコードは、コードブロック右上の「コピー」ボタンでコピーして、下のエディタに貼り付ければそのまま実行できます。

C# — ブラウザ内で実行

ブラウザ内でC#を動かす環境を読み込みます(初回のみ数秒)。
スクロールして表示された時点でも自動で読み込まれます。