.NET Framework 在catch块中抛出异常

示例

在一个catch块内,throw关键字可以单独使用,而无需指定异常值,以重新抛出刚捕获的异常。抛出异常可以使原始异常继续执行异常处理链,并保留其调用堆栈或相关数据:

try {...}
catch (Exception ex) {
  // 注意:不使用ex变量
  throw;
}

常见的反模式是throw ex,其作用是限制堆栈跟踪的下一个异常处理程序的视图:

try {...}
catch (Exception ex) {
  // 注意:将抛出ex变量
  //  以后的异常堆栈跟踪将看不到先前的调用
  throw ex;  
}

通常,使用throw ex是不理想的,因为将来检查堆栈跟踪的异常处理程序将只能看到早于的调用throw ex。通过省略ex变量,并throw单独使用关键字,原始异常将“冒泡”。