2013-07-23 75 views
0

只是爲了最佳實踐而尋求一些建議。拋出ArgumentOutOfRangeException是正確的做法嗎?

我有一個布爾方法檢查數組的每個元素的某種條件。數組參數不能爲空,也不能包含空值,否則返回true或false都沒有意義。

Best practices指出,如果傳遞給方法的參數無效,應引發ArgumentException(或派生)。如果數組參數爲null,則該方法將引發ArgumentNullException。但是,我不太確定我應該拋出什麼空數組或包含空值的數組。

我最初的想法是拋出一個簡單的ArgumentException和一個消息來解釋問題的性質,但一位同事建議我拋出一個ArgumentOutOfRangeException。

我通常認爲ArgumentOutOfRangeException是「太高」或「太低」的東西。我的同事似乎認爲它也可以代表「不夠」和「缺少某些東西」。

他對嗎?或者我應該遵循我的第一個想法並拋出ArgumentException?

+0

參數null僅僅是那個而已。在我的腦海裏,一個空數組或一個空值的數組不是一個空參數。 – Paparazzi

+0

既不在我的。這就是爲什麼我拋出ArgumentNullException只有當數組本身是一個空值。問題是當數組不爲空但是仍然無效時應該拋出什麼。 – Crono

+0

如果數組不是空和無效,那麼這不是一個ArgumentOutOfRangeException? – Paparazzi

回答

1

MSDN指出在參數不爲空的情況下應拋出ArgumentOutOfRangeException。所以這不是一個合適的例外類型。

你提到你也想檢查數組是否爲空。如果你這樣做,那麼拋出ArgumentNullException也是不合適的。

這讓你感到很遺憾。

+0

我不確定我是否理解你的第一段。如果實際上,ArgumentOutOfRangeException適用於參數不爲空的情況,那麼這是否會使其成爲正確的異常類型來拋出數組參數不爲null的情況,但是BUT包含無效值? – Crono

+0

在第一段中,我談到了其中一個數組元素爲空的情況。我理解你的問題的方式是,你想有一個檢查來驗證參數是否爲null並拋出一個ArgumentNullException。然後你會檢查是否有元素爲null或string.empty,併爲這些情況拋出另一個異常。因爲ArgumentNullException和ArgumentOutOfRangeException在兩種情況下都不是正確的類型,所以拋出一個通用的ArgumentException是最重要的。 –

+1

同樣,即使空檢查不存在,我認爲拋出ArgumentOutOfRangeException空字符串不正確。它假定您正在檢查的值有一系列值,實際上只是針對一個值進行檢查。我做了一個.net程序集的快速測試:System.Net.Mail.MailAddress mailaddress = new System.Net.Mail.MailAddress(「」)引發ArgumentException。 –

相關問題