プログラム実行中に発生するエラーを適切に処理するために、C# では「例外処理」を使います。例外処理を行わないとエラー発生時にプログラムが強制終了してしまいますが、try-catch-finally
構文を使うことで安全に処理を継続したり、エラーメッセージを出力したりすることができます。本記事ではその基本的な使い方を紹介します。
try-catch の基本
try
ブロックにエラーが起こる可能性のある処理を記述し、catch
ブロックで例外を受け取って処理します。
try
{
int x = 10;
int y = 0;
int result = x / y; // 0で割ると例外が発生
}
catch (DivideByZeroException ex)
{
Console.WriteLine("0で割ることはできません: " + ex.Message);
}
この例では、0除算の際に DivideByZeroException
が発生し、catch ブロックで処理されます。
複数の catch を使う
発生する可能性のある例外が複数ある場合は、catch を複数並べることができます。より具体的な例外から順に記述します。
try
{
string text = null;
Console.WriteLine(text.Length); // NullReferenceException
}
catch (NullReferenceException ex)
{
Console.WriteLine("ヌル参照エラー: " + ex.Message);
}
catch (Exception ex)
{
Console.WriteLine("その他の例外: " + ex.Message);
}
finally ブロックの利用
finally
ブロックに記述した処理は、例外が発生してもしなくても必ず実行されます。ファイルや接続の解放など、後始末が必要な場合に便利です。
try
{
Console.WriteLine("処理を開始");
int[] numbers = { 1, 2, 3 };
Console.WriteLine(numbers[5]); // 範囲外アクセス
}
catch (IndexOutOfRangeException ex)
{
Console.WriteLine("配列の範囲外アクセス: " + ex.Message);
}
finally
{
Console.WriteLine("後始末処理を実行");
}
例外オブジェクトの活用
catch
の引数で受け取った例外オブジェクトには、エラーの内容やスタックトレースを確認できるプロパティが含まれています。
try
{
int.Parse("abc"); // FormatException
}
catch (FormatException ex)
{
Console.WriteLine("変換エラー: " + ex.Message);
Console.WriteLine("スタックトレース: " + ex.StackTrace);
}
まとめ
C# の try-catch-finally
は以下のように使い分けます。
try
… 例外が発生する可能性がある処理を記述catch
… 発生した例外を捕捉して処理finally
… 必ず実行したい後始末処理を記述
適切な例外処理を行うことで、プログラムの信頼性と安定性を高めることができます。