0

假设在 VB.NET 中你有:

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

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

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 块”中吃掉异常,而不是让调用代码处理它。简而言之,我认为无论如何都不能完全模仿 try/catch。如果有的话,微软就不需要替换 VB 的错误处理了 :)

于 2012-06-14T20:58:35.970 回答