對於具有單個參數的構造函數,如果參數爲null/empty,那麼在構造函數中拋出ArgumentNullException是否可以?或者,它應該在實際使用該參數的方法中拋出嗎?謝謝。在構造函數中拋出ArgumentNullException?
回答
是的,如果它是完全必要的然後拋出異常。你以後不應該拋出異常。
永遠記住"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");
從聽起來像是,你傳入一個參數到構造函數由該類舉行供稍後在其他方法中使用。如果實際上沒有在構造函數中使用參數,則應該考慮將參數移動到實際上使用它的的參數。
我會盡我所能,但它是基於接口執行的一系列任務的一部分,所以我無法修改方法簽名。 – 2010-09-02 18:08:23
在這種情況下,我同意其他人認爲構造函數中的失敗絕對是最好的選擇。 – 2010-09-02 18:12:57
我會把這個檢查放在您調用構造函數時設置的屬性中......那樣在所有情況下拋出異常。
沒有跡象表明屬性是由構造函數設置的。 – 2010-09-02 18:10:48
是的,但會被抓到?類操作通常包含在try塊中,而不是創建類。 – Canacourse 2012-04-24 07:54:27
- 1. new []/delete []並在C++中拋出構造函數/析構函數
- 2. 從構造函數中拋出異常
- 3. NServiceBus在UnicastBus.IsInitializationMessage中拋出ArgumentNullException
- 4. DropDownListFor拋出ArgumentNullException
- 5. 拋出ArgumentNullException
- 6. ServerSocket的構造函數拋出異常
- 7. EJB3構造函數拋出異常?
- 8. Angular2,構造函數DI拋出異常
- 9. 從構造函數中拋出異常在C++中
- 10. Dijit構造函數拋出「調用鏈式構造函數」錯誤
- 11. 在C++類的構造函數中拋出異常
- 12. Facebook C#SDK拋出ArgumentNullException
- 13. Linq表達式拋出ArgumentNullException
- 14. 爲什麼EndGetResponse拋出ArgumentNullException?
- 15. C#Renci.SshNet.Sftp連接拋出ArgumentNullException
- 16. Activator.CreateInstance針對參數「類型」拋出ArgumentNullException
- 17. SevenZip.SevenZipExtractor構造函數在其他機器上拋出錯誤
- 18. 如何從枚舉構造函數中拋出異常?
- 19. 如果我從構造函數中拋出異常,構造函數中的釋放內存會發生什麼?
- 20. JAXB爲@XmlTransient字段拋出零參數構造函數錯誤
- 21. Fluent Nhibernate拋出異常FluentNHibernate.Automapping.IAutoClasslike ...缺少無參數構造函數
- 22. 角2參數傳遞到構造函數拋出異常DI
- 23. 到參數的構造函數顯式調用拋出Error
- 24. 重定向表單託管bean構造函數拋出「java.lang.IllegalStateException」
- 25. System.ServiceModel.ServiceHost.AddServiceEndpoint構造函數導致異常拋出
- 26. 彈簧構造函數注入拋出錯誤
- 27. 拋出異常構造函數注入 - AutoFac依賴注入
- 28. 升壓正則表達式異常從構造函數拋出* {
- 29. 構造函數可以拋出運行時異常嗎?
- 30. YamlDotNet串行構造函數拋出異常
另一個好規則是「儘早失敗」。特別是對於處理參數和參數,儘早失敗檢測錯誤,或儘可能接近發生錯誤時的時間點。 – 2010-09-02 18:12:04
你是對的!我一直在努力尋找正確原則的「名稱」。 – Nix 2010-09-02 18:13:45