[C# 入門] 自分で例外を発生させる(throw)

try-catch構文の説明の続きです。
try-catchについては[C# 入門] 例外処理(try – catch)でプログラムがエラーで停止しないようにするを見てください。

スポンサーリンク

例外を発生させる(throw)

throwキーワードを使うと自分で例外を発生させることが出来ます。
自分でメソッドを作るときに想定外の値が渡された時などに使います。

throw new Exception("エラーのメッセージ");

throwで例外を発生させる場合、メソッドを呼び出す側でtry-catchを使いその例外を処理する必要があります。そうしないとプログラムが終了してしまいます。

using System;
class Program
{
    public static void Main()
    {
        try
        {
            // メソッドに想定外の値を渡す
            CheckRange(100);

            Console.WriteLine("↑でエラーになりここは実行されない");
        }
        catch (Exception ex)
        {
            // エラーの場合の例外処理
            Console.WriteLine("Mainメソッドでエラーが発生!!!");
            Console.WriteLine(ex);
        }
    }

    public static void CheckRange(int value)
    {
        // 引数のチェック
        if (!(value >= 0 && value <= 10))
        {
            throw new Exception("CheckRangeの引数は0~10の間で指定してください。");
        }
    }
}
Mainメソッドでエラーが発生!!!
System.Exception: 引数は0~10の間で指定してください。
   at Program.CheckRange(Int32 value) in d:\source\repos\test\Program.cs:line 24
   at Program.Main() in d:\source\repos\test\Program.cs:line 9
スポンサーリンク

メソッド内で発生した例外を再発生させる(throw)

catchブロック内でthrowキーワードを使うと例外を再発生させることができます。
これを使うとメソッド内で発生した例外を処理した後で呼び出し元にもその例外を伝えることができます。

using System;
class Program
{
    public static void Main()
    {
        try
        {
            TestMeshod();
        }
        catch (Exception ex)
        {
            // エラーの場合の例外処理
            Console.WriteLine("Mainメソッドでエラーが発生!!!");
        }
    }

    public static void TestMeshod() {
        try
        {
            // インデックスの範囲外にアクセス
            Console.WriteLine(new int[] { 1, 2, 3 }[10]);
        }
        catch (IndexOutOfRangeException indexEx)
        {
            // インデックス範囲外の場合の例外処理
            Console.WriteLine("TestMeshodでIndexOutOfRangeExceptionが発生!!!");
            // 例外を再発生させる
            throw;
        }
    }
}

出力結果はこんな感じです。

TestMeshodでIndexOutOfRangeExceptionが発生!!!
Mainメソッドでエラーが発生!!!

C# プログラミング講座に戻る

コメント

タイトルとURLをコピーしました