- PR -

Throw ex と Throw

1
投稿者投稿内容
ばろっく
会議室デビュー日: 2006/05/24
投稿数: 6
投稿日時: 2006-08-07 17:11
お世話になります。下記宜しくお願い致します。


[質問内容]
過去ログに Throw ex ではなく Throw とした方が良いよ( Throw ex とするとその場所が例外発生箇所になってしまうよ)という書き込みを何度か見た事があり、今度開発する時には是非そうしようと思っていたのですが、今回、開発に当たってテストコードを書いてみたところ何が違うのか判りませんでした。当方が何か勘違いしているのかもしれません&初歩的な質問かもしれませんが、ご指摘・ご教授頂けないでしょうか?


[環境]
VS.NET2003(VB.NET)
Windowsアプリケーション
Debugモードで実行


[テストコード]
コード:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Try
            ErrorLogic() '←74行目
        Catch ex As Exception
            MsgBox(ex.ToString) 
        End Try
    End Sub

    Private Sub ErrorLogic()
        Try
            Dim i As Integer = CInt("ABC") '←82行目
        Catch ex As Exception
            Throw ex '←84行目 ★ ここを"Throw"と"Throw ex"とで試行
        End Try
    End Sub





[現象]
Throwとだけ書いた時には、82行がエラー発生行として出てくれる事を期待していましたが、どちらのコードでも例外発生行は84行とメッセージ表示されます。
ErrorLogicメソッドの(Try〜End Tryは残して)Catch句とThrow自体を削除すると、例外発生行が82行と出てくれます。


[MsgBoxの表示内容]
System.InvalidCastException: 文字列 "ABC" から型 'Integer' へのキャストが有効ではありません。 ---> System.FormatException: 入力文字列の形式が正しくありません。
at Microsoft.VisualBasic.CompilerServices.DoubleType.Parse(String Value, NumberFormatInfo NumberFormat)
at Microsoft.VisualBasic.CompilerServices.DoubleType.Parse(String Value)
at Microsoft.VisualBasic.CompilerServices.IntegerType.FromString(String Value)
--- 内部例外スタック トレースの終わり ---
at WindowsApplication20.Form1.ErrorLogic() in C:¥TestApp¥WindowsApplication20¥WindowsApplication20¥Form1.vb:line 84
at WindowsApplication20.Form1.Button1_Click(Object sender, EventArgs e) in C:¥TestApp¥WindowsApplication20¥WindowsApplication20¥Form1.vb:line 74
ひろれい
ぬし
会議室デビュー日: 2006/03/02
投稿数: 486
お住まい・勤務地: 万博開催地
投稿日時: 2006-08-07 17:27
ここは、読まれましたか?

  [VB.NET] Throw だけで例外を再スロー

#MSDN の章立ては新しくなっていますので、注意して下さい。
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2006-08-07 17:29
コード:
Private Sub TryCatch1()
     	Try
            ErrorLogic()
        Catch ex As Exception
            Throw ex 
        End Try
End Sub

Private Sub TryCatch2()
        Try
            ErrorLogic()
        Catch ex As Exception
            Throw 
        End Try
End Sub

Private Sub ErrorLogic()
	Dim i As Integer = CInt("ABC")
End Sub


ばろっく
会議室デビュー日: 2006/05/24
投稿数: 6
投稿日時: 2006-08-07 18:52
ひろれい様、todo様
情報ありがとうございました。過去ログに在ったのですね。見落としていました。
ご提示頂いたログ・MSDNヘルプを読み、サンプルソースを実行して、自分の誤解していたところが解消できました。
1

スキルアップ/キャリアアップ(JOB@IT)