特に.Net系のメソッドで顕著なのだけれど、飛んでくる可能性のある例外が多すぎて、いちいちcatch文を書いていると too long code になってしまうことがある。
だからと言って例外をキャッチしないのは問題であることは論をまたない。
catchしたらしたでコードが長くなるし、しなかったらいざ例外が飛んできたときに対応できないし、といった両極に挟まれたとき、今回紹介する方法で一挙に解決できる。
Exceptionをキャッチする
とても乱暴だけれど、すべての例外クラスが継承するException型でキャッチすれば、例外を取りこぼすこともない。
1 2 3 4 5 6 7 8 |
try { DoSomething(); } catch (Exception exception) { DoErrorHandling(); } |
このままだと、不必要な例外も処理してしまう可能性があるから、やはり乱暴にすぎる。
解決策は、例外オブジェクト(exception)の型を、より詳細に見ること。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
try { DoSomething(); } catch (Exception exception) { if (exception is ArgumentNullException || exception is InvalidOperationException || exception is ArgumentOutOfRangeException) { DoErrorHandling(); return; } throw; } |
期待していた例外オブジェクトならエラー処理を行い、そうでないなら更に上へ例外を投げるというもの。
やっていることは、いちいちcatch文を書く場合と同じだから、コード量が少なくなるこちらを選ばない手はない。
ただ、キャッチする例外が一つか二つだとか、各例外に対する処理が違うとかであれば、catch文をコツコツ書いていったほうが短くなるから、その場その場で使いドコロを考えたい。
もっとC# Tipsを知りたい!という欲張りさんなプログラマーへのおすすめ。
One Response
C#6 nameofと例外フィルター(when)の嬉しい使い方 | TOACH
[…] [C#] 複数の例外(Exception)を一箇所で処理する方法 […]