.Net の例外処理にやられた…(Java使いは要注意)

今回は例外処理にやられました。

Javaで例外処理を行うときは、下記のソースになります。

1行目:try {
2行目:    // 何かの処理を記述
3行目:    // ここで例外発生。
4行目:} catch (Exception ex) {
5行目:    // ログ出したりとか…
6行目:    throw ex;
7行目:}


その場合、StackTraceには、「3行目で例外が発生しましたよー」って出てきます。


で、それを.Net でも出来ます。が…
StackTraceには、「6行目で例外が発生しましたよー」って出てきます。


どの行で例外が発生したかわからない…(T_T)


じゃぁどうするのかっ!?
.net では、下記にします。


1行目:try {
2行目: // 何かの処理を記述
3行目: // ここで例外発生。
4行目:} catch (Exception ex) {
5行目: // ログ出したりとか…
6行目: throw;
7行目:}



そう。「throw」だけにしちゃいます。
引数のex 変数は使わないのです。


こうすることにより、「3行目で例外が発生したよー、6行目で例外が発生したよー」と
StackTraceに出力されます。


いやぁ~参った。

参考URL:
http://app.cocolog-nifty.com/t/trackback/209349/40576994
http://app.cocolog-nifty.com/t/trackback/209349/40588989
http://app.cocolog-nifty.com/t/trackback/209349/40601030


ちなみに、

1行目:try {
2行目: // 何かの処理を記述
3行目: // ここで例外発生。
4行目:} catch (Exception ex) {
5行目: // ログ出したりとか…
6行目: throw New Exception(ex.Message, ex);
7行目:}


「throw New Exception(ex.Message, ex);」とかやる人も居ます。
コレは、例外を内包してしまうので、取り扱い注意です。

ex.StackTrace() には、「6行目で例外が発生したよー」が入ってます。
ex.InnerException.StackTrace()には、「3行目で例外が発生したよー」が入ってます。

取り扱い注意です。
てか、こんなふざけたことやるな!意味が無い!
(当たり前だけど、発生した例外を自作の例外クラスに作り変える等の場合は除くよ?
上記例は、同じ例外クラスを作って入れてるから意味無いんだよ。)



参考先にもありますが、あえて記述します。
結論っ!
1.不要なTry~Catch句は記述するなっ!(.NET、Java共通)
2.例外を 再throw するときは、例外オブジェクトを付けるなっ!(.NETのみ)
3. Finally が欲しいだけなら、Catch 句は付けるなっ!(Try~Finallyにしろっ!)(.NET、Java共通)


Javaは、普通?に「throw ex;」で問題無いもんねー
.net…なぜこんな制約を付けた…意味無いのに…

って事ですな。
というか、このプロジェクトのソース、何もしてないTry~Catch句が多すぎてむかつく。
消してぇ~~~~

コメント

このブログの人気の投稿

ヨドバシカメラの店舗購入履歴を見るには…

C# の WPF の DataGrid で 行を交互に背景色を変える+選択色を変える+カラムが無い所も変える…

Visual Studio の ホットリロードが動かない場合に確認するところ