2013-01-09 25 views
2

我有點困惑。如果驗證方法應返回驗證結果,爲什麼會出現ArgumentException的課?

MSDN說,對ArgumentException的是什麼:

「時提供給 方法的其中一個參數無效時引發的異常。」

所以我會拋出一個異常,如果傳遞給我的方法的參數是無效的。

而且我發現,故建議可返回布爾加上字符串原因。 - 除了拋出異常。

所以,

問題:當validationg方法的參數,當參數無效,應該在什麼時候驗證方法拋出一個異常,當它不應該?

+1

「建議可返回布爾加上字符串原因」這將有助於舉,你讀這,有一個鏈接。 –

+1

例如... http://stackoverflow.com/questions/5230978/is-it-a-good-practice-to-throw-an-exception-on-validate-methods-or-better-to-r – pencilCake

+1

你以前的問題和這個問題有什麼不同? –

回答

9

如果你有一個目的是驗證它的參數的方法(例如:這是一個有效的用戶名/密碼組合),通過任何方式返回一個布爾(false = invalid)加上一個原因。不要爲預期的情況拋出異常(如果它不是預期的,爲什麼驗證?)

如果你有一個「Process」方法,情況就不同了:你必須有有效的參數,所以拋出一個合理的參數是合理的例外(說明問題)無效時。

+0

+1同意。然而,如果你需要返回一個帶有字符串IMO的bool,你應該返回一個封裝了bool和string的類。不要使用輸出參數,當有人來維護/重構代碼時,它們只會導致頭痛。 – nashwan

+0

@nashwan:具有類來封裝失敗原因的一個優點是,有可能有派生類,包括適用於某些類型的故障的詳細信息。 – supercat