c# – throw和throw之间的区别new Exception()

有什么区别

try { ... }
catch{ throw } 

try{ ... }
catch(Exception e) {throw new Exception(e.message) } 

无论第二个显示消息?

最佳答案
扔;重新抛出原始异常并保留其原始堆栈跟踪。

抛出ex抛出原始异常,但重置堆栈跟踪,销毁所有堆栈跟踪信息,直到您的catch块。

不要写投掷

throw new Exception(ex.Message);更糟糕。它创建一个全新的异常实例,丢失异常的原始堆栈跟踪及其类型。 (例如,IOException)。
此外,一些异常保存附加信息(例如,ArgumentException.ParamName)。
throw new Exception(ex.Message);也会破坏这个信息。

在某些情况下,您可能想要将所有异常封装在自定义异常对象中,以便您可以提供有关代码在抛出异常时执行的操作的其他信息。

为此,定义一个继承Exception(add all four exception constructors)的新类,以及可选的附加构造函数,该构造函数接受InnerException以及附加信息,并抛出您的新异常类,将ex作为InnerException参数传递。通过传递原始的InnerException,您保留所有原始异常的属性,包括堆栈跟踪。

转载注明原文:c# – throw和throw之间的区别new Exception() - 代码日志