2010-07-30 52 views
0

我知道一般的或「全線」的異常處理是一個很大的禁忌,但我相信在這種情況下它是可以的。有沒有辦法在C#中的靜態類中捕獲某種類型的所有異常?

考慮一下BinaryWriter/BinaryReader操作的一些自定義包裝。 (是的,我知道.NET序列化)在這個類的所有方法中,都有可能存在某些異常,例如傳遞一個字節[],對於您嘗試讀取的數據來說太短它或試圖讀取不正確的類型。

因此,所有這些不同的寫入/讀取數據的方法,我想以某種方式處理此類中拋出的某些異常的所有實例。例如,每當拋出一個EndOfStreamException時,返回錯誤狀態或設置特定標誌。

有沒有一個乾淨的/好的方法來做到這一點,每次讀/寫操作周圍扔try/catch?或者,這仍然是一個不容否認的問題,因爲圖書館的用戶應該試着自己去接聽課程的電話?

回答

2

您可以將BinaryWriter/Reader函數包裝在您自己的對象中並捕獲異常。

+0

二進制打字機/閱讀器功能已經在我自己的對象中。問題是有許多不同的功能(針對不同類型的寫入/讀取),我試圖繞過每一個嘗試/捕獲這些功能。 – mphair 2010-07-30 17:27:38

+1

@mphair - 如果您有多個函數,每個函數都會調用多個讀/寫函數,那麼您無法避免這種情況。如果你有一個函數(比如'Serialize()')調用很多其他函數,那麼你可以在那裏捕獲異常。 – 2010-07-30 17:31:21

1

在某些情況下,留給用戶/調用者來處理異常是有意義的。當你發現異常時你打算做什麼樣的事情?

你可以將你的代碼分成許多方法/函數嗎?每個人都應該做一件事,所以你會有1或2個try-catch塊。

Exception Handling in C#: Multple Try/Catches vs. One

1

寫了這一切這的try/catch濫用。您提到的任何需要捕獲的條件實際上都是程序中的錯誤。你不能用一個catch塊來修復一個bug,你只能隱藏這個bug。用戶仍然對此感到非常興奮,她不能再使用她的舊數據。無論您是否添加一堆異常處理代碼,最終結果都是一樣的:她將卸載更新並向您發送一封令人討厭的電子郵件。

如果由於某種原因您的更新無法再讀取舊數據文件是可以接受的,那麼可以在根目錄下解決這個問題。向數據添加版本號,以便您可以輕鬆檢測到文件不再可用。無需再使用例外。或者,如果更容易展開邏輯,則只需要一種異常類型。留下他們打算的所有其他例外情況:「這裏有一些真的錯誤,讓我們不要試圖在上面」。

相關問題