0

VB.NETに次のようなものがあるとします。

Try
   Debug.Print("Trying...")
Catch ex as Exception
   throw new Exception("Exception", ex)
Finally
   Debug.Print("Finally...")
End Try

「OnErrorGoto」コンストラクトを使用してこれをどのように記述しますか?(なぜ私がこれをやりたいのかを尋ねる質問はありません、それができるかどうかだけ興味があります)。

4

2 に答える 2

3

どうぞ:

   On Error Goto ErrHandler
    Debug.Print("Trying...")

    Goto Finish

    ErrHandler:
      Debug.Print("Exception...")
      On Error Goto ErrHandler2
      Debug.Print("Throwing another error, I guess...")

      Goto Finish2

      ErrHandler2:
      Debug.Print("Exception 2...")

      Finish2:
      Debug.Print("Finally 2...")


    Finish:
    Debug.Print("Finally...")
于 2012-06-14T21:01:07.167 に答える
0

コメント無し...

Public Sub PleaseDontMakeMeDoThis()
    On Error Goto ExceptionHandler
    Debug.Print("Trying...")
    Debug.Print("Finally...")
    Exit Sub
ExceptionHandler:
    Debug.Print("Exception...")
    Resume Next
End Sub

唯一の違いは、try / catchで、catchで例外がスローされた場合でも、finallyが処理されることです。どうやってそれを処理するのかわかりません。私はあなたがこのようなことをすることができると思います:

Public Sub PleaseDontMakeMeDoThis()
    On Error Resume Next
    Debug.Print("Trying...")
    If Err.Number <> 0 Then
        On Error GoTo PseudoFinally
        Debug.Print("Exception...")
    End If
PseudoFinally:
    Debug.Print("Finally...")
End Sub

ただし、この場合は、呼び出し元のコードに処理させるのではなく、「catchブロック」の例外を処理しているだけです。要するに、あらゆる方法でトライ/キャッチを完全に模倣する方法はないと思います。もしあれば、MicrosoftはVBのエラー処理を置き換える必要はなかったでしょう:)

于 2012-06-14T20:58:35.970 に答える