内部例外として元の例外をスローした場合、呼び出し元でその例外を受け取ることができます。具体的には、再スローされた例外のInnerExceptionプロパティを使用して、元の例外にアクセスすることが可能です。
再スローと内部例外の取り扱い
再スローの方法
再スローする際に、元の例外を新しい例外の内部例外として設定することが一般的です。以下のように、C#の例を考えてみましょう。
try {
// 何らかの処理
} catch (Exception e) {
throw new CustomException("新しいエラーメッセージ", e); // 元の例外を内部例外として設定
}
この場合、CustomExceptionのインスタンスがスローされ、元の例外eはInnerExceptionプロパティに格納されます。
呼び出し元での受け取り
呼び出し元では、次のようにして再スローされた例外をキャッチし、元の例外にアクセスできます。
try {
// メソッド呼び出し
} catch (CustomException e) {
Console.WriteLine("Caught: " + e.Message);
if (e.InnerException != null) {
Console.WriteLine("Inner exception: " + e.InnerException.Message); // 元の例外のメッセージを表示
}
}
このように、CustomExceptionをキャッチした後、InnerExceptionプロパティを通じて元の例外にアクセスすることができます。
まとめ
したがって、内部例外として元の例外をスローした場合、呼び出し元では変数eを使用してその例外を受け取ることができ、InnerExceptionを通じて元の例外の詳細にアクセスすることが可能です。これにより、エラーハンドリングの際に元のエラーの情報を保持しつつ、新しいエラーメッセージを提供することができます。

