我非常厭煩檢查我的所有參數爲null,並拋出ArgumenutNullExceptions時,他們是。設計契約/ C#4.0 /避免ArgumentNullException
據我所知,C#4.0通過契約構造來實現一些設計。是否可以指定一個方法在C#4.0中不接受空參數?
此外,有什麼我可以做在這期間(也許屬性?),以避免這種單調的任務檢查爲空和投擲?
我非常厭煩檢查我的所有參數爲null,並拋出ArgumenutNullExceptions時,他們是。設計契約/ C#4.0 /避免ArgumentNullException
據我所知,C#4.0通過契約構造來實現一些設計。是否可以指定一個方法在C#4.0中不接受空參數?
此外,有什麼我可以做在這期間(也許屬性?),以避免這種單調的任務檢查爲空和投擲?
您可以創建一個NotNull<T>
泛型類,但有一些副作用。見Robert Nystrom's blog post。
作爲替代已經給出答案,這是值得研究的這種設計模式的Null Object design pattern
.
的實質是,一旦創建了「空對象」,沒有進一步需要執行任何對null的檢查以及null對象的方法都會實現所需的行爲,每當null(否則)將被傳遞與對「真實對象」的引用時。
此設計模式不依賴於C#4.0,實際上可以在幾乎所有的OO編程語言中輕鬆實現。
裏克·布魯斯特描述簡潔,聲明式的參數在這個崗位檢查一個好的解決方案,
http://blog.getpaint.net/2008/12/06/a-fluent-approach-to-c-parameter-validation/
避免了使用反射(DBC的缺點),且不會產生開銷非特殊代碼路徑。
就像他如何使用擴展方法來允許對null對象顯示實例方法調用。非常聰明的編碼國際海事組織。
如果您是在DbC,Google Spec#和PostSharp上銷售的。
我剛剛開始在C#4.0中使用Code Contracts的新功能,您需要從MS下載外掛程序以允許您在項目設置中看到它。這裏的詳細信息 - > http://research.microsoft.com/en-us/projects/contracts/
這是一個很好的模式,但它不會停止調用者傳遞實際的空值。 – 2009-03-22 00:00:43