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