是你指定要趕上哪些異常異常捕獲
try
{
...
}
catch (NHibernate.ADOException exception)
{}
和
try
{
...
}
catch (exception ex)
{}
是你指定要趕上哪些異常異常捕獲
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一樣。
另外如果你期待指定的異常,它是一個很好的習慣,趕上它的實際類型,然後'異常'類型。在這種情況下,使用'NHibernate.ADOException'是更好的解決方案 – 2010-08-24 10:42:54
我假設你的意思
catch (Exception ex) {}
與第二片段。
然後區別在於第一個將只捕獲一個特定類型的異常,即NHibernate.ADOException
,而第二個將會進入catch塊以查找可能拋出的所有異常。
第二個通常是不好的做法,因爲你聲稱處理所有可能的錯誤類型。但是,在最外層的範圍內,對於任何通過的異常來說,它都是有意義的。
強烈不建議使用catch {Exception},因爲這實際上隱藏了一個錯誤。在可能引發異常的每個地方,都需要捕獲預期的異常類型,即使這需要編寫更多的代碼行。當引發意外的異常時,程序必須崩潰,這是解決該錯誤的唯一方法。
後者將不會編譯,除非您碰巧有一個名爲'exception'的類型。 – Joey 2010-08-24 10:40:14