2010-09-02 74 views

回答

51

是的,如果它是完全必要的然後拋出異常。你以後不應該拋出異常。

永遠記住"Fail Early Principle"。現在概念失敗了,所以你不會浪費時間調試或者遇到意想不到的系統功能。

或者,您也可以爲「」和ArgumentNullException爲null引發ArgumentException。在任何一種情況下,請確保您拋出有效的異常消息。


始終用於管理例外一個很好的參考文章:Good Exception Management Rules of Thumb


旁註什麼@Steve米凱洛蒂說(因爲我CodeContracts一個巨大的風扇)

Contract.Requires<ArgumentNullException>(inputParemeter!= null, "inputparameter cannot be null"); 
Contract.Requires<ArgumentException>(inputParemeter!= "", "inputparameter cannot be empty string"); 

Contract.Requires<ArgumentNullException>(!string.IsNullOrEmpty(inputParemeter), "inputparameter cannot be null or empty string"); 
+5

另一個好規則是「儘早失敗」。特別是對於處理參數和參數,儘早失敗檢測錯誤,或儘可能接近發生錯誤時的時間點。 – 2010-09-02 18:12:04

+0

你是對的!我一直在努力尋找正確原則的「名稱」。 – Nix 2010-09-02 18:13:45

4

從聽起來像是,你傳入一個參數到構造函數由該類舉行供稍後在其他方法中使用。如果實際上沒有在構造函數中使用參數,則應該考慮將參數移動到實際上使用它的的參數。

+1

我會盡我所能,但它是基於接口執行的一系列任務的一部分,所以我無法修改方法簽名。 – 2010-09-02 18:08:23

+0

在這種情況下,我同意其他人認爲構造函數中的失敗絕對是最好的選擇。 – 2010-09-02 18:12:57

17

在構造函數中拋出它很好 - 在.NET框架中有幾個類可以實現這一點。此外,請查看code contracts

+2

代碼合同+1。 – Nix 2010-09-02 18:18:19

1

我會把這個檢查放在您調用構造函數時設置的屬性中......那樣在所有情況下拋出異常。

+0

沒有跡象表明屬性是由構造函數設置的。 – 2010-09-02 18:10:48

+0

是的,但會被抓到?類操作通常包含在try塊中,而不是創建類。 – Canacourse 2012-04-24 07:54:27

相關問題