之间有什么区别
try
{
...
}
catch (NHibernate.ADOException exception)
{}
和
try
{
...
}
catch (exception ex)
{}
答案 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。在每个可能抛出异常的地方,只需要捕获预期的异常类型,即使这需要编写更多的代码行。抛出意外异常时,程序必须崩溃,这是修复错误的唯一方法。