异常捕获
问题描述:
是你指定要赶上哪些异常异常捕获
try
{
...
}
catch (NHibernate.ADOException exception)
{}
和
try
{
...
}
catch (exception ex)
{}
答
之间的差别在catch块。因此,如果你有
try {}
catch(Exception e){}
它会捕获从Exception类派生的所有异常(因此所有例外)。如果您有:
try{}
catch (NHibernate.ADOException exception){}
它只会捕获ADOException或从ADOException派生的异常。所以如果你得到一个ArgumentException,它会通过,就好像没有try/catch一样。
+0
另外如果你期待指定的异常,它是一个很好的习惯,赶上它的实际类型,然后'异常'类型。在这种情况下,使用'NHibernate.ADOException'是更好的解决方案 – 2010-08-24 10:42:54
答
我假设你的意思
catch (Exception ex) {}
与第二片段。
然后区别在于第一个将只捕获一个特定类型的异常,即NHibernate.ADOException
,而第二个将会进入catch块以查找可能抛出的所有异常。
第二个通常是不好的做法,因为你声称处理所有可能的错误类型。但是,在最外层的范围内,对于任何通过的异常来说,它都是有意义的。
答
强烈不建议使用catch {Exception},因为这实际上隐藏了一个错误。在可能引发异常的每个地方,都需要捕获预期的异常类型,即使这需要编写更多的代码行。当引发意外的异常时,程序必须崩溃,这是解决该错误的唯一方法。
后者将不会编译,除非您碰巧有一个名为'exception'的类型。 – Joey 2010-08-24 10:40:14