什麼是正確的做法。捕捉異常C#
從最具體到最一般或相反的情況下捕捉異常。
如果我寫
try
{
...
}
catch(Exception e)
{
...
}
catch(NullReferenceException nre)
{
...
}
威爾的NullReferenceException NRE曾經被抓?
什麼是正確的做法。捕捉異常C#
從最具體到最一般或相反的情況下捕捉異常。
如果我寫
try
{
...
}
catch(Exception e)
{
...
}
catch(NullReferenceException nre)
{
...
}
威爾的NullReferenceException NRE曾經被抓?
不,你必須從最具體到去最普遍。你舉的例子有看起來像
try
{
}
catch(NullReferenceException nre)
{
}
catch(Exception e)
{
}
try
{
...
}
catch(NullReferenceException nre)
{
...
}
catch(Exception e)
{
...
}
而且我也不會趕上NullReferenceException
,我會測試,如果我試圖訪問的值實際上訪問它或之前不爲空使用null coalescing operator (??)來確保此例外從不發生。
應該避免接觸一般的Exception
。恕我直言,你應該只在一些全局異常處理程序中執行此操作,因爲每次調用某個方法時很少可以處理所有可能的異常。在這種情況下,你應該只捕捉一些特定的例外情況,並採取適當的行動。
號,您應該抓住從最具體的例外情況一般。
最派生較少衍生
try塊可以拋出多個異常,可以通過使用多個catch塊處理。請記住,更專業的catch塊應該出現在廣義的catch塊之前。否則,編譯器將顯示編譯錯誤。
爲了被抓時,NullReferenceException
應先放入追趕名單。
try {
...
} catch (NullReferenceException ex) {
....
} catch (Exception ex) {
...
}
它指定要處理NullReferenceException
以一種特殊的方式,你有一些具體的事情做。然後,讓其他類型的例外通過最通用的捕獲來落實。另一方面,應避免非特定的異常處理,因爲此MSDN文章建議:Exception Handling
。
此外,最好在嘗試訪問它之前驗證要訪問的對象是否爲null(在Visual Basic中爲Nothing),而不是讓代碼訪問對象並在其爲空時拋出此異常。以下是此問題的有用鏈接:Exception Handling Best Practices in .NET
。
當然它從最具體到一般。
try {
...
} catch (IOException ex) {
....
} catch (Exception ex) {
...
}
很容易測試,肯定 – 2010-10-18 14:43:35
真的很容易測試會發生什麼事嗎? – eomeroff 2010-10-22 21:51:04
是的,只需在try塊中放置一個新的NullReferenceException(),並且如果該catch語句未被調用,那麼就沒有其他情況可以測試。 – jcmcbeth 2013-02-14 15:56:29