按契约/ C#4.0设计/避免ArgumentNullException
-
10-07-2019 - |
题
我非常厌倦检查所有的null参数,并在它们出现时抛出ArgumenutNullExceptions。
据我了解,C#4.0通过契约构造实现了一些设计。是否可以指定方法不接受C#4.0中的空参数?
另外,在此期间我可以做些什么(可能是一个属性?)来避免这种单调的检查null和抛出的任务?
解决方案
您可以创建一个有帮助的NotNull<T>
泛型类,但是有一些副作用。请参阅 Robert Nystrom的博客文章。
其他提示
Rick Brewster在本文中描述了一个简洁的声明式样式参数检查的好方法,
http:// blog.getpaint.net/2008/12/06/a-fluent-approach-to-c-parameter-validation/
避免使用反射(DbC的缺点),并且不会为非异常代码路径创建开销。
就像他如何使用扩展方法来允许对null对象进行实例方法调用。非常聪明的编码IMO。
如果您在DbC,Google Spec#和PostSharp上出售。
作为已经给出的答案的替代方案,值得研究 Null Object design pattern
。
这种设计模式的本质是一旦<!>“null对象<!>”;在创建时,不再需要对null执行任何检查,并且null对象的方法实现所需的行为,只要传递null(否则)vs对<!> quot的引用;真实对象<!> QUOT;
此设计模式不依赖于C#4.0,实际上几乎可以在任何OO编程语言中轻松实现。
我刚开始使用Code Contracts这是C#4.0中的一项新功能,您需要从MS下载一个插件,以便您在项目设置中查看它。详情 - <!> gt; http://research.microsoft.com/en-us/projects/contracts/