例外処理

C#入門⑦ 例外処理

例外処理とは?

プログラム実行中にエラーが発生すると、そのままでは処理が停止してしまいます。
そこで、エラーに適切に対処する仕組みが 例外処理(Exception Handling) です。

C#では try-catch-finally を用いて例外を扱います。

try-catchの基本

try ブロックで例外が発生した場合、catch ブロックで処理を行います。

try
{
    int x = 10;
    int y = 0;
    int result = x / y; // ここで例外が発生
}
catch (DivideByZeroException ex)
{
    Console.WriteLine("0で割ることはできません: " + ex.Message);
}

複数のcatch

例外の種類ごとに複数の catch を用意できます。

try
{
    string text = null;
    Console.WriteLine(text.Length); // NullReferenceException
}
catch (NullReferenceException ex)
{
    Console.WriteLine("オブジェクトがnullです");
}
catch (Exception ex)
{
    Console.WriteLine("その他のエラー: " + ex.Message);
}

finallyブロック

finally は例外の有無に関わらず、必ず実行される処理を記述します。
リソースの解放などに利用されます。

try
{
    Console.WriteLine("処理開始");
    int[] arr = { 1, 2, 3 };
    Console.WriteLine(arr[5]); // IndexOutOfRangeException
}
catch (Exception ex)
{
    Console.WriteLine("エラー: " + ex.Message);
}
finally
{
    Console.WriteLine("後処理を実行します");
}

throwで例外を発生させる

自分で例外を投げることも可能です。

void CheckAge(int age)
{
    if (age < 0)
    {
        throw new ArgumentException("年齢は0以上で指定してください");
    }
    Console.WriteLine("年齢: " + age);
}

例外クラスの階層

C#の例外はすべて System.Exception を基底クラスとしており、以下のような種類があります。

  • ArgumentException : 引数が不正
  • NullReferenceException : null参照
  • IndexOutOfRangeException : 配列の範囲外アクセス
  • InvalidOperationException : 無効な操作

まとめ

  • try-catch で例外を捕捉し、適切にエラー処理を行う
  • finally で必ず実行する後処理を記述できる
  • throw を使って独自の例外を発生させることも可能
  • 例外クラスの種類を理解して使い分けることが重要