Vb.net 如何使用On Error Goto复制try/catch/finally

Vb.net 如何使用On Error Goto复制try/catch/finally,vb.net,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”构造编写此代码?(请不要问我为什么要这样做,只是好奇是否可以做到) 无可奉告 Public Sub PleaseDontMakeMeDoThis()

假设在VB.NET中有:

Try
   Debug.Print("Trying...")
Catch ex as Exception
   throw new Exception("Exception", ex)
Finally
   Debug.Print("Finally...")
End Try
您将如何使用“On Error Goto”构造编写此代码?(请不要问我为什么要这样做,只是好奇是否可以做到)

无可奉告

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
Public Sub PleaseDontMakeMeDoThis()
出错时继续下一步
Debug.Print(“正在尝试…”)
如果错误号为0,则
关于错误转到伪最终
打印(“异常…”)
如果结束
最后:
Debug.Print(“最终…”)
端接头
但在这种情况下,它只是在“catch块”中处理异常,而不是让调用代码处理它。简言之,我不认为有任何方法可以完全模仿尝试/捕获。如果有,微软就不需要替换VB的错误处理:)

没有评论

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
Public Sub PleaseDontMakeMeDoThis()
出错时继续下一步
Debug.Print(“正在尝试…”)
如果错误号为0,则
关于错误转到伪最终
打印(“异常…”)
如果结束
最后:
Debug.Print(“最终…”)
端接头
但在这种情况下,它只是在“catch块”中处理异常,而不是让调用代码处理它。简言之,我不认为有任何方法可以完全模仿尝试/捕获。如果有,微软就不需要替换VB的错误处理:)

给你:

   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...")
给你:

   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...")

不太正确,即使出现异常,最终也会执行抱歉,忘了下一个恢复。不会真正起作用,如果捕获被更改怎么办。。。请参阅更新的问题…不太正确,即使出现异常也会最终执行抱歉,忘记了下一个恢复。不会真正起作用,如果捕获被更改怎么办。。。请参阅更新的问题…如果捕获是“抛出新异常”(“Ha!”,ex),该怎么办。然后这就不起作用了。请参阅更新的问题…在错误处理程序代码中需要另一个错误处理程序。这需要大量的Goto。必须有一种方法来干净地执行此操作…Nope On Error Goto=mess等待获取messier。调用函数获取错误的唯一方法是将其传回(可能通过ByRef字段)。这就是为什么错误转到如此糟糕的原因(以及所有的转到或进程)。如果捕获是“抛出新异常”(“Ha!”,ex),该怎么办。那就不行了。请参阅更新的问题…错误处理程序代码中需要另一个错误处理程序。这是大量的Goto。必须有一种方法来干净地执行此操作…错误为Nope On Goto=mess等待获取messier。调用函数获取错误的唯一方法是将其传回(可能通过ByRef字段)。这就是为什么出错后的Goto如此糟糕(以及所有的Goto或course)。