2009-01-12 65 views
5

我非常厭煩檢查我的所有參數爲null,並拋出ArgumenutNullExceptions時,他們是。設計契約/ C#4.0 /避免ArgumentNullException

據我所知,C#4.0通過契約構造來實現一些設計。是否可以指定一個方法在C#4.0中不接受空參數?

此外,有什麼我可以做在這期間(也許屬性?),以避免這種單調的任務檢查爲空和投擲?

回答

2

不確定C#4.0中的本機DbC結構,但Microsoft將發佈跨語言Contracts庫。
您可以下載MSVS2008 here的版本。

1

作爲替代已經給出答案,這是值得研究的這種設計模式的Null Object design pattern.

的實質是,一旦創建了「空對象」,沒有進一步需要執行任何對null的檢查以及null對象的方法都會實現所需的行爲,每當null(否則)將被傳遞與對「真實對象」的引用時。

此設計模式不依賴於C#4.0,實際上可以在幾乎所有的OO編程語言中輕鬆實現。

+0

這是一個很好的模式,但它不會停止調用者傳遞實際的空值。 – 2009-03-22 00:00:43

4

裏克·布魯斯特描述簡潔,聲明式的參數在這個崗位檢查一個好的解決方案,

http://blog.getpaint.net/2008/12/06/a-fluent-approach-to-c-parameter-validation/

避免了使用反射(DBC的缺點),且不會產生開銷非特殊代碼路徑。

就像他如何使用擴展方法來允許對null對象顯示實例方法調用。非常聰明的編碼國際海事組織。

如果您是在DbC,Google Spec#和PostSharp上銷售的。