C#で例外処理を行う場合try-catch
構文を使用します。*1
catch
句で取得した例外を呼び出し元に通知するためにはthrow
ステートメントを使用しますが、このthrow
ステートメントに例外変数を添えるか添えないかで、受け取った側の内容に違いが出ることを最近になって知りました。
ということで忘れないようメモします。
サンプルプログラム
throw と throw ex の違いを説明する前に、下記の検証用のプログラムを用意します。
38行目で強制的に例外を発生させています。そして31行目と32行目をコメントで切り替えて、結果を検証します。
動作結果
throw
throw ex
結果の違い
サンプルプログラムを見ると、関数Method2()
で例外が起きています。
throw
の例外内容ではきちんとMethod2()
で例外が発生し、38行目が実際の例外箇所だということが分かります。
しかしthrow ex
の例外内容では、34行目が例外の発生箇所となっています。
これではどのような処理のせいで例外が発生したか分かりませんね。
この通り、例外処理でthrow
ステートメントを使用する場合は、例外変数は添えずに実装しないと、例外の原因となっている箇所の特定は難しいということになります。
勉強になりました。
余談
はてなブログの記事にGistが貼り付けられるようになったんですね!*2
- 作者: Gary McLean Hall,長沢智治,クイープ
- 出版社/メーカー: 日経BP社
- 発売日: 2015/06/04
- メディア: 単行本
- この商品を含むブログ (5件) を見る