你会如何使用On Error Goto复制try / catch / finally

时间:2012-06-14 20:53:40

标签: vb.net

假设在VB.NET中你有:

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

您如何使用“On Error Goto”构造编写此内容? (请不要问我为什么要这样做,只是好奇是否可以做到)。

2 个答案:

答案 0 :(得分: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...")

答案 1 :(得分: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块”中吃异常而不是让调用代码处理它。简而言之,我认为无论如何都无法完全模仿尝试/捕获。如果有的话,微软不需要替换VB的错误处理:)