面对 SocketException 的一些奇怪问题。随附的屏幕截图说明了更多相关信息。
为什么第一个 catch block 没有捕获异常,而它本来是要捕获 SocketException 而抛出的异常又是 SocketException。
为什么控件要转到第二个 catch block ,该 block 旨在捕获任何异常?
[编辑]:在 Debug模式下也添加截图
最佳答案
执行是不进入第二个catch block ,try-catch
显然不是那样的,异常会向上抛出调用栈,任何后面的catch
子句被忽略。
它只是看起来那样,因为您在Release 模式下调试,这不是一个好主意,因为 IDE 可能缺少重要的调试信息,因此错误地显示当进入第二个 catch
子句时执行停止。
请注意,在那个点停止真的没有意义,如果执行以某种方式进入第二个 catch
子句,它会在 throw
语句处停止,而不是之前。
简而言之,真正发生的事情是执行在第一次 throw
时停止,IDE 没有正确显示它。
故事的寓意;不要在Release 模式下调试。如果您正在运行 VS2015,它实际上会警告您在 Release 模式下的调试体验将低于标准(不确定此警告是否出现在以前的版本中)。
更新:这个问题似乎与Release 模式下的调试无关,因为它仍然发生在Debug 模式下。不过,要点是调试不应该在 Release 模式下进行,因为可能会发生这种奇怪的事情。我会尝试清洁溶液,看看是否能解决问题。如果没有,我也不会担心,代码运行正常,只是 IDE 没有正确显示执行停止的地方,没什么大不了的。
关于c# - 为什么抛出的异常与 catch block C# 不正确匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37071063/