訳わかんなくなってきたので記録。
- 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のチェックを入れておく必要があることに注意。
基本中の基本だけど、最初はみんな迷うから間違わないように。