Try-Catch のネストに関するメモ

こんなネストを書くのは如何かと思いながらも、こんなコード。
[VB.NET]

    Sub Main()
        Try
            Try
                Throw New ApplicationException(“test”)
            Catch ex As Exception
                Console.WriteLine(“Caught: Level 2″)
                Console.WriteLine(ex.Message)
            End Try
            Console.WriteLine(“End of normal line of Level 1″)
        Catch ex As Exception
            Console.WriteLine(“Caught: Level 1″)
            Console.WriteLine(ex.Message)
        End Try
        Console.WriteLine(“Hit any key…”)
        Console.ReadKey()
    End Sub

で、コレの結果は

Caught: Level 2
test
End of normal line of Level 1
Hit any key…

Exceptionは握り潰されました。
じゃぁこれは?

    Sub Main()
        Try
            Try
                Throw New ApplicationException(“test”)
            Catch ex As Exception
                Console.WriteLine(“Caught: Level 2″)
                Console.WriteLine(ex.Message)
                Throw ’<-これを追加             End Try             Console.WriteLine("End of normal line of Level 1")         Catch ex As Exception             Console.WriteLine("Caught: Level 1")             Console.WriteLine(ex.Message)         End Try         Console.WriteLine("Hit any key...")         Console.ReadKey()     End Sub

結果は…

Caught: Level 2
test
Caught: Level 1
test
Hit any key…

こっちはExceptionが伝播しました。
どっちが欲しいのかは状況によって代わるので、きちんと理解しておかないと後で辛いと。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Spam Protection by WP-SpamFree