2017-08-17 64 views
1

我想知道在我的.NET方法可以基於提供的參數和當前對象狀態拋出兩個或多個異常中的一個的情況下遵循什麼最佳實踐。哪個異常應該優先,我如何確定?如果.NET方法有選擇,應該拋出哪個異常?

對於一般情況下的答案會是最好的,但這裏有一個例子來說明我的問題:

假設我有一個接受一個對象參數的方法。此參數不能爲空,因爲它具有需要爲方法執行工作而調用的屬性或方法。在這種情況下可能引發ArgumentNullException

另外假設我的方法是在一個類上,它的實例首先需要處於特定的狀態才能使該調用有效。如果他們不是,那麼InvalidOperationException可能會在這裏拋出。

現在考慮在類實例也處於無效狀態時使用null參數調用方法的情況。我應該拋出哪個例外,ArgumentNullExceptionInvalidOperationException?爲什麼?

回答

1

InvalidOperationException是我選擇的第一個例外情況,用於檢查所描述的例子。該示例的處理順序首先要求對象在適合調用該方法之前處於特定狀態。如果它不處於適當的狀態,那麼方法輸入的驗證就無關緊要了。因此,拋出ArugmentNullException將掩蓋這個例子的真正問題。