我目前在try塊後使用兩個catch塊。第一個捕獲SqlExceptions,第二個Exceptions。 如果SqlException沒有特定的消息,我希望它由常規catch塊處理。有什麼辦法可以將異常從第一個catch塊傳遞到第二個,還是我必須複製代碼?通過從特定捕獲到特定捕獲的異常
0
A
回答
2
首先,你應該問自己,如果你真的想要趕上Exception
。如果你不能處理這個異常,你不應該抓住它。
如果您確實想要捕捉到所有目的異常並在您的catch塊之間共享某種處理,那麼重複代碼並不是正確的方法。爲什麼不將處理封裝在方法中並從兩個塊調用?
1
在這種情況下,您將不得不復制代碼。
雖然可以將它重新拋入異常塊並讓調用函數處理它,但不能將異常向下放到catch塊中。
1
假設Catch語句未嵌套,這個代碼在VB.Net:
Try
SomeCode()
Catch ex As ArgumentException When ex.Message <> ""
Trace.WriteLine(String.Format("Caught argument exception with a message {0}", ex.Message))
Catch ex As Exception
Trace.WriteLine("Caught argument exception with no message, or some other type of exception")
End Try
如果SomeCode拋出了一個消息(如使用空構造創建的ArgumentException的),它將一個ArgumentExeption由第一條Catch語句處理。所有其他異常將由第二個Catch語句處理,包括具有空消息的ArgumentException。我假設如果VB.NET可以做到這一點,C#可以(但假設可能是非常錯誤的)。
編輯:它似乎沒有C#中的等效代碼結構,如here問。對不起,如果我誤導了。
+0
這正是我想要做的!不幸的是,似乎C#不支持這一點。 – Rawling 2010-03-04 09:37:12
相關問題
- 1. 捕獲PHP異常的特定實例
- 2. Python:捕獲特定的異常
- 3. 在OLEDBException下捕獲特定異常-2147467259
- 4. 捕捉特定的異常
- 5. 發送未捕獲的異常到一個特定的方法
- 6. Java何時捕獲一般異常和特定異常
- 7. 僅捕獲特定的HttpException
- 8. Cocoa - 捕獲特定事件
- 9. 的Python:捕捉特定的異常
- 10. 如何從存儲過程中捕獲特定的異常類型?
- 11. 使用Jdbc捕獲特定的FK異常
- 12. 如何捕獲JDBC中的特定異常?
- 13. 捕獲oledb異常與特定的錯誤代碼
- 14. 如何在發送郵件時捕獲特定的異常?
- 15. 瓶中間件來捕獲特定類型的異常?
- 16. 如何捕獲我期望的特定異常?
- 17. 如何在C中捕獲特定的異常#
- 18. 只在RxJava中捕獲特定類型的異常2
- 19. 從特定點捕獲字符串
- 20. 捕獲異常
- 21. 捕獲異常
- 22. 捕獲異常
- 23. 異常捕獲
- 24. C#winforms不會在特定情況下捕獲異常
- 25. 通過tomcat和servlet捕獲異常
- 26. GDB。只捕獲不捕獲的異常
- 27. Django的捕獲異常和重定向
- 28. 未捕獲的異常確定源
- 29. 通過Jquery/JS/Browser特定的API捕獲打印事件
- 30. 從Xalan捕獲異常
不幸的是(或者幸運的是)這不是我的代碼,所以重寫Exception catch塊不在我的範圍之內。 目前唯一的「處理」是顯示帶有例外消息的MessageBox,因此,現在將其提取到自己的方法可能是矯枉過正的。 – Rawling 2010-03-04 09:35:55
在這種情況下,聽起來應該刪除一般的異常處理,並讓異常冒泡到捕獲所有處理程序或簡單地讓應用程序崩潰。 – 2010-03-04 09:40:27
我的意思是,根據前面的人來說,一般的異常捕捉是正確的,這不是我嘗試重寫它的地方! 最後修復:刪除特定的異常catch塊並簡單地檢查一般塊內異常的類型。沒有代碼重複,因爲我們正在尋找特定的異常,而不是特定類型的異常,所以更有意義。 – Rawling 2010-03-04 12:10:42