猿问

捕获和重新抛出.NET异常的最佳实践

捕获和重新抛出.NET异常的最佳实践

在捕获异常并重新抛出异常时,需要考虑哪些最佳实践?我想确保Exception对象的InnerException堆栈痕迹被保存下来。下面的代码块在处理这些代码块的方式上有区别吗?

try{
    //some code}catch (Exception ex){
    throw ex;}

与:

try{
    //some code}catch{
    throw;}


翻翻过去那场雪
浏览 558回答 3
3回答

摇曳的蔷薇

保存堆栈跟踪的方法是通过使用throw;这也是有效的。try {   // something that bombs here} catch (Exception ex){     throw;}throw ex;基本上就像从那个点抛出一个异常一样,所以堆栈跟踪只会转到您要发出throw ex;声明。麦克也是正确的,假设异常允许您传递一个异常(这是建议的)。卡尔·塞金有一个在异常处理方面写得很好在他的编程电子书的基础这也是一本很好的读物。编辑:工作链接到方案编制的基础PDF。只需搜索文本中的“异常”。

Smart猫小萌

如果您抛出一个带有初始异常的新异常,您也将保留初始堆栈跟踪。try{} catch(Exception ex){      throw new MoreDescriptiveException("here is what was happening", ex);}
随时随地看视频慕课网APP
我要回答