2011-04-06 128 views
2

我正在設計一個WinForms應用程序。我應該處理哪些異常?

目前,我所有的異常都是在UI級別記錄的。

但是,對於他們中的任何一個,除了日誌以外,我還要做其他事情嗎?這是否表明設計不好?另外,在一種方法中(.NET的方法在windows服務上執行命令),它可以拋出Win32Exception和InvalidOperationException類型的異常。

像FileNotFound這樣的異常,我可以提示用戶提供另一個文件(雖然.NET有內置的方法來檢查文件是否存在),但是像上面這樣的例外情況,它們已經降到了低級別機器出現問題,所以這些只能記錄下來。

這是決定捕捉哪些異常的正確方法嗎?另外,我應該抓住還是拋出ArgumentNullException?它表明代碼存在問題,對吧?

+0

您提到的Win32和InvalidOperation異常的原因是什麼?根據他們可能被認爲是骨頭,外源性,令人煩惱或致命的。 – 2011-04-08 16:39:38

回答

4

(我將使用Eric Lipperttaxonomy of exceptions整個答案。)

如果有什麼可以做這件事,那麼只需登錄並解救當前的操作,屏幕或整個應用程序,這取決於關於錯誤的嚴重性。只是不要嘗試着面對致命異常。在一些極端的情況下(如AccessViolationException),只是記錄甚至讓你的finally塊運行可能不是一個好主意,因爲如果你在損壞的進程中運行代碼,你不知道會發生什麼。

FileNotFoundException和其他外生的例外你應該處理反正。即使您可以預先檢查文件是否存在,但沒有任何東西阻止它在檢查與使用之間無法訪問。這些例外取決於你無法控制的外部條件,所以你應該準備好處理它們。

您不應該捕獲ArgumentNullException或任何其他骨頭異常如果你這樣做會傷害你,不要這樣做。如果你不應該傳遞一個空參數,那麼不要傳遞它。修復代碼,以便事先處理空引用。

相關問題