訳わかんなくなってきたので記録。
- Catchの中でReturnってやると、その場で戻る。
- CatchのThrowしても、その場で例外として飛ぶ。
Catch ex As CustomException
Throw ex
Return -1
Ent Try
この場合、Returnは通らずに、上階層にCustomExceptionを飛ばす。
Catch ex As CustomException
Return -1
Throw ex
End Try
この場合、上階層には-1が戻り、例外は隠蔽される。
同様の理由により、下記のコードではReturnを経由せずにCatchに飛んでしまう。
Try
Throw New CustomException("カスタムエラーですわ。")
Return "Tryから出ました。"
Catch ex As CustomException
Return "Catchから出ました。"
Finallyに書かれた処理は、ReturnやEnd Functionが実行される前に必ず実行されるので、安心して「共通片付け」として記述できる。ただし、エラーの場合、オブジェクトが未生成のままFinallyに来ることを想定して、Nothingのチェックを入れておく必要があることに注意。
基本中の基本だけど、最初はみんな迷うから間違わないように。