我想定義一個自定義異常,我想知道是否可以包含一個類而不是字符串作爲消息。原因是我想以更靈活的結構發送額外的信息。我可以在異常中包含攜帶附加信息的對象嗎?
5
A
回答
16
是的。只需創建一個從Exception繼承的類。
class YourException : Exception
{
public YourException(SpecialObject thethingYouWantIncluded)
{
ExtraObject = thethingYouWantIncluded;
}
public SpecialObject ExtraObject { get; private set; }
}
然後
throw new YourException(new SpecialObject());
和
catch (YourException ex) { /* do something with ex.ExtraObject here */ }
6
當然可以,有點。
在C#中,所有例外都是類,它們是System.Exception
的實例或從中派生的某個類。如果要製作自定義異常,則只需定義一個從Exception
繼承的新類。
在這個自定義類,你可以添加任何額外的屬性,字段等要:
public class CustomException : Exception
{
public Object CustomThing { get; set; }
}
當你趕上這樣的異常轉換類型的變量CustomException
,你將有機會獲得所有的您定義的自定義屬性,就像任何其他類一樣。
但是,你不能做的是改變Exception.Message
是字符串的事實。您的自定義消息類將具有Message
屬性,它將是string
,並且您無法更改它。您需要定義一個包含所有相關信息的自定義字符串。您可以覆蓋Message
屬性從您的自定義屬性返回信息,但它仍然需要一個字符串:
public class CustomException : Exception
{
public override string Message
{
get
{
if (this.CustomThing == null)
{
return base.Message;
}
else
{
return string.Format("Custom thing: {0}", this.CustomThing);
}
}
}
}
+0
+1提到:「但是,你不能做的是改變Exception.Message是一個字符串的事實。」 – hometoast
相關問題
- 1. 在輸出對象中包含附加信息是一個好主意嗎?
- 2. mvc5附加信息:「對象」不包含定義「行動」
- 3. 使用three.js,我可以將信息附加到對象,如URL嗎?
- 4. 我可以在服務對象中包含輔助方法嗎?
- 5. 我可以在PyQt中將對象附加到QListWidgetItems嗎?
- 6. 在WCF中包含返回值中的異常信息
- 7. 信息存儲在異常對象:在異常
- 8. 我可以配置LLBLGen在異常中包含生成的SQL嗎?
- 9. Realm中的對象可以在查詢中返回其包含的對象嗎?
- 10. 我可以使用單獨的對象來包含Server Reference嗎?
- 11. 你可以用subuery *和*添加附加信息嗎?
- 12. python optparse,如何在使用輸出中包含附加信息?
- 13. C#:我可以從CLR的未處理異常中獲取詳細信息嗎?
- 14. 附加信息:無效的對象名稱信息「vb.net
- 15. registerForRemoteNotificationTypes用戶的附加信息。它可以顯示嗎?
- 16. 將包含在對象中的信息顯示到ListView中
- 17. 我可以獲得對組件中包含的對象的引用嗎?
- 18. 可以在異常中存儲其他對象嗎?
- 19. 數據傳輸對象類可以包含其他對象嗎?
- 20. 可以映射包含類對象或類對象嗎?
- 21. Spring OAuth 2 + JWT包含訪問令牌中的附加信息
- 22. HBITMAP可以包含alpha通道信息嗎?
- 23. 我可以從MATLAB中的biograph對象中提取座標信息嗎?
- 24. 帶有附加信息的SQL查詢
- 25. 我可以創建一個包含所有附件和項目信息的Neon發行版嗎?
- 26. 可以NSUserDefaults的攜帶
- 27. 在對象中攜帶canvas ctx?
- 28. 如何重新拋出包含有關原始異常信息的異常?
- 29. 將JSON附加到包含相關信息的HTML容器
- 30. 在Java中,異常消息是否可以包含正則表達式字符?
「拋出一個類,而不是一個字符串」 ??? throw關鍵字總是拋出一個異常,是一類所以,你總是在拋出一個類。 – nitgeek