加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

VB.NET尝试捕捉多个捕获块

发布时间:2020-12-16 23:54:04 所属栏目:大数据 来源:网络整理
导读:这是一个很奇怪的问题。我们有一个尝试捕获与多个捕获块。第一个Catch块没有代码,只是一个注释。 Try 'Some CodeCatch ex As ThreadAbortException 'Do NothingCatch ex As Exception HandleException(ex)End Try 如果抛出ThreadAbortException以外的异常,
这是一个很奇怪的问题。我们有一个尝试捕获与多个捕获块。第一个Catch块没有代码,只是一个注释。
Try
  'Some Code
Catch ex As ThreadAbortException
  'Do Nothing
Catch ex As Exception
  HandleException(ex)
End Try

如果抛出ThreadAbortException以外的异常,它将被第二个Catch捕获,如预期的那样。然而,当在VS2010中通过代码,ex对象是Nothing在这种情况下。到目前为止,我们已经找到两种方法来“解决”这个问题。

修正1:
重命名第一个异常变量。

Try
  'Some Code
Catch tex As ThreadAbortException
  'Do Nothing
Catch ex As Exception
  HandleException(ex)
End Try

修复2:将任何代码行添加到第一个Catch块。

Try
  'Some Code
Catch ex As ThreadAbortException
  Dim i As Integer = 1
Catch ex As Exception
  HandleException(ex)
End Try

在上述任何情况下,HandleException中的代码似乎仍然正常运行,如果它运行。这是Visual Studio或调试器中的错误吗?或者我们缺少这里的东西,上面的第一个代码块是无效的?

这是所有在.NET 4.0。

Teejay有正确的答案。

但是,如果你的Catch块是空的,处理这个异常根本没有意义。你只是想防止最后一个块捕捉它。你可以使用你的方法 – 但是认为有一个空的Catch块通常是不可接受的:异常应该不被捕获,或应该正确处理;默默吞下他们必须被视为一个错误。你的case是这个规则的一个例外,但因为它需要被记录在代码中,否则它会混淆仔细的维护者。

嗯,VB有一个特殊的成语,正是这种情况:

Try
    ' …
Catch ex As Exception When Not TypeOf ex Is ThreadAbortException
    ' Only executed if `ex` isn’t a ThreadAbortException
End Try

这个代码根本不捕捉ThreadAbortException,这是正确的事情做,如果你不想处理它:ThreadAbortException不能被吞下,所以即使你抓住它,它将被重新推出在Catch块的结尾。

注意,这从根本上不同于SysDragon的答案,它使用传统的If语句,而这里的代码使用Catch语句中的特殊子句作为过滤器。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读