例外処理

例外処理

例外処理とは、本来ならばプログラム中で起こってはいけないことが起こってしまうことを言う。 例外が起こったときでもプログラムが異常な動作をしないよう、例外処理(exception handling)を行う必要がある。 例外をキャッチするのは、異常な状態を回復させ、処理を継続する場合のみ。

例外が発生する可能性のある側では、 throw 文を使って例外が起こったことを利用側に知らせる。

throw 例外クラスのインスタンス

この throw 文は想定外のことが起こった場所に挿入する。 throw 文によって投げられる例外は、 System.Exception クラスの派生クラスのインスタンスである。 それ以外のクラスのインスタンスを throw することは出来ない。

ex:

try
{
  例外が投げられる可能性のあるコード
}
catch(例外の種類)
{
  例外処理コード
}
finally
{
  例外発生の有無にかかわらず実行したいコード
  リソースの破棄などを行う
}

別の例外をスローする

try {

} catch (FileNotFoundException ex) {
    throw new MyAppException("ファイルが見つかりませんでした", ex)
}

変数 ex には例外オブジェクトが格納されている。
例外オブジェクトを参照することで、例外の詳細情報を知ることが出来る。

例外が発生したことを把握したい場合・例外の再スロー

try {

} catch (FileNotFoundException ex) {
    Log.Write(ex.ToString()); // Log出力
    throw;
}

特定の例外発生時に、それを無視して処理を継続させたいケースもある。 その場合は、なんの目的でその例外をキャッチするのか、なぜその例外を無視するのかをコメントで残すようにする。 例外を throw する場合、InnerException を破棄してはいけない。

参考: 例外処理 - C# によるプログラミング入門 | ++C++; // 未確認飛行 C 実戦で役立つ C#プログラミングのイディオム/定石&パターン:書籍案内|技術評論社