任何人都可以闡明拋出自定義異常(從System.Exception繼承)的優點和缺點,或正確的方式來使用它們嗎?我已經知道何時/何時不拋出異常,但我正在尋找如何創建自己的自定義異常的指導。.NET拋出自定義異常
回答
這些都是很棒的貼子。到目前爲止,我最同意Brian Rasmussen - 當你想處理不同類型的特定異常時創建自定義異常。
也許一個例子會有所幫助。這是一個人爲的例子,在日常代碼中可能有用或不用。假設你有一個負責認證用戶的類。除了對用戶進行身份驗證之外,該課程還有一個鎖定機制,可在幾次失敗嘗試後鎖定用戶。在這種情況下,您可以將其設計爲類別2自定義例外的一部分:AuthenticationFailedException
和UserLockedOutException
。如果用戶被成功認證,您的AuthenticateUser
方法就會簡單地返回而不拋出,如果用戶未通過身份驗證,則拋出AuthenticationFailedException
,如果用戶被鎖定,則拋出UserLockedOutException
。
例如:
try
{
myAuthProvider.AuthenticateUser(username, password);
ShowAuthSuccessScreen();
}
catch(AuthenticationFailedException e)
{
LogError(e);
ShowAuthFailedScreen();
}
catch(UserLockedOutException e)
{
LogError(e);
ShowUserLockedOutScreen();
}
catch(Exception e)
{
LogError(e);
ShowGeneralErrorScreen();
}
再次,一個人爲的例子。但希望它可以顯示如何以及爲什麼要創建自定義例外。在這種情況下,AuthProvider
類的用戶正在以不同的方式處理每個自定義異常。如果AuthenticateUser
方法簡單地拋出了Exception
,那麼將不可能區分不同的原因爲什麼拋出了異常。
很好的解釋,用例子得到我的接受票。 – andrewWinn 2009-10-15 16:23:08
自定義異常允許您提供清晰,有意義的異常,這反過來可以使您的庫更加可用,前提是您在適當的時候使用現有異常。
無論何時您需要引發不適合直接放入框架異常模型的異常,您都可以創建自定義異常。
使用您自己的例外來標記特定於您的應用程序/域的錯誤。優點是你的catch塊可以過濾正確的異常並根據這些異常行事。對於其他所有使用特定的標準例外。
我最近寫了一篇關於這個問題的整個博客條目:
- http://blogs.msdn.com/jaredpar/archive/2008/10/20/custom-exceptions-when-should-you-create-them.aspx
的基本概括,雖然是...
您應該只創建一個新的異常如果您希望開發人員針對該問題採取糾正措施或記錄事後調試。
- 1. 拋出自定義異常
- 2. 拋出自定義異常
- 3. 在Java中拋出自定義異常與在異常中拋出異常
- 4. 自定義鍵盤拋出異常
- 5. 拋出自定義Java異常
- 6. Kotlin - 拋出自定義異常
- 7. 拋出和捕獲自定義異常
- 8. 從SSRS拋出自定義異常
- 9. 在Servlet中拋出自定義異常
- 10. 拋出時拋出自定義Java異常
- 11. 從捕捉異常策略中拋出自定義異常
- 12. 獲取自定義消息出來拋出自定義異常的
- 13. 預拋鉤自定義異常?
- 14. C#明確定義拋出的異常
- 15. XmlJavaTypeAdapter拋出用戶定義的異常
- 16. 自動映射器自定義解析器拋出空異常
- 17. .NET自定義配置部分:Configuration.GetSection拋出'無法找到程序集'異常
- 18. 魔術異常拋出拋出異常
- 19. 拋出異常拋出異常
- 20. Java:拋出自身異常(?)
- 21. 拋出自定義的異常收集信息並再次拋出
- 22. 如何爲自定義異常類型關閉「拋出異常時中斷」
- 23. 如何拋出自定義異常時,異常的類型被構造
- 24. 使用拋出包含未知異常到自定義異常的建議
- 25. 確定拋出異常?
- 26. 自定義配置節處理程序拋出異常
- 27. 自定義拋出異常的錯誤信息javascript
- 28. JAX-WS客戶端拋出SOAPFaultException而不是自定義異常
- 29. 爲什麼我的自定義HttpResponse在HttpResponse.End()上拋出異常?
- 30. 自定義異常拋出正在打印爲空的消息
杜佩:http://stackoverflow.com/questions/417428/why-create-custom-exceptions – 2009-10-15 15:34:45
我不會把這看作是一個愚蠢的事情,關閉,但不在我的書中,也許我的問題不夠清楚。 – andrewWinn 2009-10-15 15:37:11
這當然是一個比鏈接副本更好的措辭。如果關閉,我將投票重新開放。 – Randolpho 2009-10-15 15:45:55