异常捕获

时间:2010-08-24 10:36:39

标签: c# exception-handling

之间有什么区别
 try
 {
     ... 
 }
 catch (NHibernate.ADOException exception)
 {}

try
{
    ... 
}
catch (exception ex)
{}

3 个答案:

答案 0 :(得分:6)

在catch块中指定要捕获的异常。所以,如果你有

try {}
catch(Exception e){}

它将捕获从Exception类派生的所有异常(因此所有异常)。如果你有:

try{}
catch (NHibernate.ADOException exception){}

它只会捕获ADOException或从ADOException派生的异常。因此,如果你得到一个ArgumentException,它就会传递,好像没有try / catch。

答案 1 :(得分:1)

我假设你的意思

catch (Exception ex) {}

使用第二个代码段。

然后区别在于第一个只捕获一个特定类型的异常,即NHibernate.ADOException,而第二个异常将进入catch块,以查找可能抛出的所有异常。

第二种通常是不好的做法,因为你声称要处理所有可能的错误类型。但是,它可以在最外层范围内作为任何通过的异常的全部内容。

答案 2 :(得分:0)

强烈建议不要使用catch {Exception},因为这实际上隐藏了一个bug。在每个可能抛出异常的地方,只需要捕获预期的异常类型,即使这需要编写更多的代码行。抛出意外异常时,程序必须崩溃,这是修复错误的唯一方法。