例外とは
例外は、通常の処理を続けられない状況を表すオブジェクトです。ファイルが見つからない、形式が不正、許可されていない操作など、実行時に発生する問題を通知します。
tryとcatch
using System;
class Program
{
static void Main()
{
try
{
int value = int.Parse("not-a-number");
Console.WriteLine(value);
}
catch (FormatException)
{
Console.WriteLine("数値に変換できません。");
}
}
}
tryの中で例外が発生すると、対応するcatchへ制御が移ります。例外の種類を指定し、処理できるものだけを捕捉します。
finally
finallyは、例外が発生したかどうかにかかわらず実行したい後処理に使います。ただし、ファイルやストリームなどIDisposableを実装するリソースには、通常usingを使う方が安全です。
例外を使う場所
- 入力形式の確認には、まずTryParseなどの戻り値で判定できるAPIを検討する。
- 回復できる状況では、利用者に次の行動が分かるメッセージを返す。
- 原因を隠すためだけの空のcatchを作らない。
- 例外を捕捉して別の例外を投げ直す場合は、元の原因を失わないようにする。
例外をそのまま公開しない
例外メッセージやスタックトレースには、内部パスや実装情報が含まれる場合があります。利用者へは必要な説明だけを返し、詳細情報は適切に保護されたログへ記録します。