![]() |
1
15
根据您所看到的质量,它不会在其他地方引发异常。”throw“没有目标会重新引发异常,这与引发异常非常不同。主要是一次重发不会重置堆栈跟踪。 在这个特定的示例中,catch是无意义的,因为它不做任何事情。异常情况很高兴地重新发生了,几乎就像try/catch不存在一样。 |
![]() |
2
3
我认为该构造应该用于处理您知道将要在代码中抛出的异常;如果引发了其他异常,则只需重新引发。 考虑到这一点 投掷; 不同于 抛出; throw-ex会将堆栈截断到新的抛出点,从而丢失有关异常的宝贵信息。
|
![]() |
3
3
不可能,理想情况下,catch块会做一些处理,然后重新执行,例如,
当然,如果您想在代码的上层做一些进一步的处理,那么重新抛出将非常有用。 |
![]() |
4
1
做这样的事是毫无意义的,总的来说,我尽量不走无意义的路。 在大多数情况下,我相信捕获您知道如何处理的特定类型的异常,即使这只意味着用更多信息创建自己的异常,并将捕获的异常作为innerException。 |
![]() |
5
1
有时这是适当的-当您要处理调用堆栈中更高级别的异常时。但是,您需要在该catch块中执行一些操作,而不仅仅是重新抛出以使其有意义,例如记录错误:
|
![]() |
6
0
我见过这样捕获泛型异常,然后重新打包到自定义异常对象中的实例。 这与您所说的不同之处在于,这些自定义异常对象保存了更多关于实际发生的异常的信息,而不是更少。 |
![]() |
7
0
好吧,首先我会这么做
但基本上,如果您捕获了多种类型的异常,您可能需要在本地处理一些异常,而在堆栈中备份其他异常。 例如
|
![]() |
8
0
取决于你所说的“看起来像这样”,如果在catch块中除了一个rethrow之外没有其他内容…如果是这种情况,则try catch是无意义的,除非,如您所说,混淆异常发生的位置。但是,如果您需要在发生错误的地方做一些事情,但是希望进一步处理堆栈中的异常,那么这可能是适当的。但接下来,捕获的将是您所处理的特定异常,而不是任何异常。 |
![]() |
9
0
|
![]() |
10
0
通常情况下,具有不做任何事情的异常处理块根本就不好,原因很简单,它会阻止.NET虚拟机在性能优化代码时嵌入您的方法。 有关“为什么”的完整文章,请参阅“ Release IS NOT Debug: 64bit Optimizations and C# Method Inlining in Release Build Call Stacks “由 Scott Hanselman |
![]() |
Alex Pander · cleaner代码的嵌套命名空间[已关闭] 6 年前 |
![]() |
Jamil Noyda · 导入模块的最佳方式Python[复制] 6 年前 |
![]() |
Samselvaprabu · 我们是否需要不惜任何代价避免重复? 6 年前 |
![]() |
user9549524 · 基于一列的值从二维矩阵中提取值 7 年前 |
![]() |
MedAl · 不使用try/catch处理异常 7 年前 |
![]() |
Declan McKenna · 特殊情况模式在Swift中是否多余? 7 年前 |