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を使って独自の例外を発生させることも可能- 例外クラスの種類を理解して使い分けることが重要