【问题标题】:Err.Number vs try-catch in VB.netErr.Number 与 VB.net 中的 try-catch
【发布时间】:2011-07-02 22:12:42
【问题描述】:

我继承了一个旧的 VB.net 项目。该代码主要使用 try-catch 进行错误处理。但是在某些地方我发现了If Err.Number <> 0 Then

如果发生错误,是什么决定是应该抛出Exception,还是只设置Err

我不想同时处理错误...

【问题讨论】:

  • 臭名昭著的 On Error Resume Next。

标签: vb.net exception-handling try-catch


【解决方案1】:

Err 对象与旧式 On Error 错误处理结构一起使用,这是经典 VB 的剩余部分。 Try-Catch 是更流行的 .NET 错误处理方式。

您可以在Error Handling in Visual Basic.NET 中了解更多信息以及区别。

【讨论】:

  • 我如何确定哪个错误处理处于活动状态?我认为 Just On Error Goto 0 应该设置旧式。
  • @leiflundgren:任何与您正在查看的代码最接近的构造都将是活动构造。您可以混合两种样式,但不能在一个方法中。因此,您可以让一种方法使用On Error 语句设置错误处理,然后调用另一种使用Try-Catch 的方法。
  • @fredrik-mork:啊,所以如果我在一个方法中写 On Error Goto 0(或类似的),我会使用那个阶梯。否则就是try-catch?
  • @leiflundgren:是的,几乎是正确的。为了使用Try-Catch,您当然需要在代码中包含此类语句。如果您既没有On Error 也没有Try-Catch,则任何异常都将无法处理并导致您的应用崩溃。
  • @fredrik-mork:啊。错误是假设现有代码是正确的。 ;) 添加了我现在习惯的 try-catch。谢谢!
【解决方案2】:

听起来旧代码正在使用 On Error Resume Next。确保您了解它的作用,这有点奇怪!

docs解释一下

On Error Resume Next 会导致执行继续执行紧跟在导致运行时错误的语句之后的语句,或者执行紧接在最近调用包含 On Error Resume Next 语句的过程之后的语句。尽管出现运行时错误,该语句仍允许继续执行。您可以将错误处理例程放在会发生错误的位置,而不是将控制权转移到过程中的另一个位置。

然后您将使用 If Err.Number 0 来检查是否发生了错误。

【讨论】:

    猜你喜欢
    • 2017-06-29
    • 2020-03-13
    • 2019-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-26
    • 2017-08-07
    • 2017-10-09
    相关资源
    最近更新 更多