簡體   English   中英

我應該處理/捕獲這些異常嗎?

[英]Should I handle/catch these exceptions?

以下例外情況可能非常相似:

  • ArgumentException
  • ArgumentNullException
  • InvalidOperationException
  • ObjectDisposedException

    1. 我應該把它們放在我的代碼中嗎?
    2. 我應該抓住他們嗎?
    3. InvalidOperationException是一個非常模糊和廣泛的異常,因為它意味着一個方法嘗試了由於 state 而無法執行的操作(例如,啟動一個可能無法啟動的 win svc)。

作為一般規則,您應該盡可能拋出最具體的異常。 這為消費者提供了處理/理解異常的最佳機會。

例如,

  • 當 arg 為 null 時,拋出 ArgumnetNullException
  • arg 超出范圍時的 ArgumentOutofRange 異常
  • ArgumentException 是 arg 由於其他原因而無效。

InvalidOperationException 非常廣泛,當更具體的選項不適合時,通常用作包羅萬象。

這完全取決於你在做什么。 除了 ObjectDisposedException(您應該留給運行時處理)之外,所有這些都可以在適當的情況下拋出。

您是否期望其中一些會發生,然后通過各種方式抓住它們並適當地處理這種情況。

大多數自制的方法參數驗證器(通常命名為 Guard、Arguments 等)在 arguments 無效的情況下會拋出這些異常:

  • ArgumentException - 當方法參數錯誤時
  • ArgumentNullException - 當方法參數是 null

我相信 MSDN 對何時拋出此類異常有非常詳細的描述,

當調用方法並且傳遞的 arguments 至少有一個不符合被調用方法的參數規范時,將引發ArgumentException ArgumentException 的所有實例都應帶有描述無效參數的有意義的錯誤消息,以及參數的預期值范圍。

當調用方法並且傳遞的 arguments 中的至少一個是 null 但絕不應該是 null 時,將引發ArgumentNullException

InvalidOperationException用於由於無效 arguments 以外的原因導致方法調用失敗的情況。 例如,InvalidOperationException 由以下引發:

  • 如果在創建枚舉器后修改了集合的對象,則 MoveNext。
  • GetString 如果資源集在方法調用之前關閉。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM