本文へスキップ
BecomeCoder

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

throw ― 自分で例外を投げる

ブラウザで完結

導入

不正な引数を受け取ったとき、間違った値のまま処理を続けるより、その場で例外を投げて止めるほうが安全です。throwで自分から例外を発生させます。

図解

flowchart TB
    IN["Withdraw(-100)"] --> C{"金額は正しい?"}
    C -->|不正| T["throw で例外を投げる<br/>→ 呼び出し側に異常を伝える"]
    C -->|正常| P["処理を続行"]
    style T fill:#ffebee

サンプル

Console.WriteLine(Divide(10, 2));   // 5

try
{
    Divide(10, 0);   // ここで投げられた例外を catch する
}
catch (ArgumentException ex)
{
    Console.WriteLine($"呼び出し側で捕捉: {ex.Message}");
}

int Divide(int a, int b)
{
    if (b == 0)
    {
        // 不正な入力はその場で例外を投げて処理を止める
        throw new ArgumentException("0で割ることはできません");
    }
    return a / b;
}
  • throw new 例外型("メッセージ"); で例外を発生させる
  • 不正な引数にはArgumentExceptionがよく使われる
  • 「間違った値で処理を続けない」ことでバグの拡大を防ぐ(早期に失敗させる)

演習

// TODO: 年齢を受け取り、マイナスなら ArgumentException を投げ、
//       正常なら "受付完了" を返す Register メソッドを定義してください。
//       Register(-5) を try-catch し、例外メッセージ "年齢が不正です" を出力してください
___
  • 期待される出力: 年齢が不正です
ヒント1を見る

string Register(int age) { if (age < 0) throw new ArgumentException("年齢が不正です"); return "受付完了"; }

ヒント2を見る

try { Register(-5); } catch (ArgumentException ex) { Console.WriteLine(ex.Message); } string Register(int age) { if (age < 0) throw new ArgumentException("年齢が不正です"); return "受付完了"; }

まとめ

  • throw new 例外型("メッセージ")で自分から例外を投げる
  • 不正な引数はArgumentExceptionで早期に失敗させる
  • 間違った値で処理を続けないことがバグを防ぐ

次回: 業務のルール違反を表す「独自例外クラス」の作り方です。

実際に動かしてみよう

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

C# — ブラウザ内で実行

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