![]() |
1
20
这会使 准确的 相同的例外:
然而,这会在没有原始堆栈跟踪的情况下重新引发异常:
通常有一个很好的理由
|
![]() |
2
3
如果你在抓捕中什么都不做…但这通常用于在重新执行捕获之前执行捕获中的其他操作,如日志记录或其他类型的异常处理。 |
![]() |
3
2
我使用这种技术,以便在调试时在抛出上放置一个断点。有时候我做完后就把它取下来… |
![]() |
4
2
主要区别在于,异常的堆栈跟踪将被更改,以显示它源自第一个示例中try catch的位置。 第二个示例维护堆栈跟踪。 |
![]() |
5
2
有什么优势吗一般来说,不是。所有这些模式都将把堆栈跟踪重置到新的抛出点。这只会让开发人员更难找到问题的根源。 它会减慢代码的速度吗完全?可能。通过任何可测量的差异降低速度?不。 如果catch块如下,会有什么不同吗?是的,这种捕获基本上是完全多余的。它将重新引发异常,该异常将维护原始堆栈跟踪,并且对应用程序没有可察觉的影响。 |
![]() |
6
1
我看不出有什么优势。如果您没有处理异常,请关闭Try/Catch。这个例子的另一个问题是,您不会抛出实际的异常,而是抛出一个新的异常。 2-是的-但是除非这是一个重复代码的大循环,否则你可能不会注意到有什么不同。 3—是的。在第一个例子中,您正在处理您的调用堆栈。这个例子通过使异常冒泡而不是抛出一个新的异常来保持堆栈的完整性。 |
![]() |
7
1
如果你真的什么都没做,我只发现了一个好处:你可以在
不过,我只在调试时这样做,然后恢复代码。 |
![]() |
8
1
我写了一个快速测试来显示不同之处。测试代码如下:
运行这个,我得到以下输出:
您会注意到前两个异常的工作方式相同。所以,“throw,”不会改变任何东西,直到异常向上移动堆栈为止。但是,“throw ex3;”会导致报告的异常不同,从而更改异常的堆栈跟踪。 |
![]() |
9
1
它经常适合伐木。另外,如果在re-throw中去掉参数,那么它不会改变e的堆栈跟踪。 有时,您希望允许通过某些类型进行处理,例如,这里对除fooexception之外的所有内容进行特殊处理:
|
![]() |
10
0
当然。 通常,您希望在抛出异常之前记录它,并可能从该方法中记录一些变量值。 不过,仅仅是抓住它扔出去,并不能给你带来很多好处。 |
![]() |
11
0
就像那样,不,但是,你可能想这样做:
其中logException()是一个自定义类,用于erm记录异常或通过电子邮件发送警报等。 |
![]() |
12
-1
我认为重点是确保只抛出一种类型的异常。这是一个很糟糕的反模式imho 例如
|
|
Robert King · Unity C#语法问题-转换位置 1 年前 |
![]() |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
|
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
![]() |
i_sniff_ket · 在unity之外使用unity类 2 年前 |