.Net の例外処理にやられた…(Java使いは要注意)
今回は例外処理にやられました。
Javaで例外処理を行うときは、下記のソースになります。
その場合、StackTraceには、「3行目で例外が発生しましたよー」って出てきます。
で、それを.Net でも出来ます。が…
StackTraceには、「6行目で例外が発生しましたよー」って出てきます。
どの行で例外が発生したかわからない…(T_T)
じゃぁどうするのかっ!?
.net では、下記にします。
そう。「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
ちなみに、
「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句が多すぎてむかつく。
消してぇ~~~~
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句が多すぎてむかつく。
消してぇ~~~~
コメント
コメントを投稿