【问题标题】:Try statement not catching the exception inside a case block尝试语句未捕获案例块内的异常
【发布时间】:2026-01-24 15:25:01
【问题描述】:
          Dim Fields() As String = msg.Split()
          ...
          Try
            If Fields(0) = "FOO" Then
                Select Case Fields(1)
                    Case "1"
                       ...
                    Case "2"
                        ...
                    Case "3"
                       Dim some_object as A = other_object ' other_object is type B
                    Case "4"
                       ...
                    Case "5"
                       ...
                    Case "6"
                        ...
                    Case "7"
                        ...
                    Case Else
                        'TBD
                End Select
            End If

        Catch e As Exception
            Dim xyz As Integer= 0
        End Try

由于某些奇怪的原因,我的 Catch 块没有在我的案例块中捕获异常,特别是 无效的强制转换异常。有谁知道为什么?谢谢

【问题讨论】:

  • 是什么让你觉得它没有被抓到?
  • 这引出了一个问题,除非 Option Strict 关闭,否则它为什么要编译。 Fields 是什么/如何声明/定义的?
  • 因为我的程序崩溃并告诉我“在 program.exe 中发生了“System.InvalidCastException”类型的第一次机会异常。附加信息:无法将“A”类型的对象转换为“B”类型"
  • a) 将字符串数组中的元素与字符串文字进行比较不会导致该异常 b) 错误消息不指示正在使用字符串 c) 第一次机会 异常不会崩溃应用程序 d) 是的,代码在哪里,我认为您误诊了它的原因/原因。更有可能是索引超出范围异常,因为您在拆分后不检查计数/大小。
  • 您不会在异常对话框中打开“抛出时中断”,对吗?如果是这样,Visual Studio 将在引发异常的行中断,即使您处理它也是如此。 i-msdn.sec.s-msft.com/dynimg/IC808490.jpeg。看起来你的 try / catch 被忽略了。

标签: vb.net try-catch


【解决方案1】:

在我看来,您为此异常类型或所有异常都启用了“抛出时中断”。

打开此选项后,调试器将在引发异常的行中断,即使它位于 try/catch 块内,使其看起来好像该块被忽略了。如果按继续,catch 块应该会正常运行。

我不止一次打开这个选项来调试特定的东西,却忘记关闭它。

【讨论】:

    最近更新 更多