我非常厌倦检查我所有的参数是否为 null,并在它们出现时抛出 ArgumenutNullExceptions。
据我了解,C# 4.0 支持按合同构造进行一些设计。在 C# 4.0 中是否可以指定方法不接受空参数?
另外,在此期间我能做些什么(也许是一个属性?)来避免检查 null 和抛出这种单调的任务?
我非常厌倦检查我所有的参数是否为 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 的缺点)并且不会为非异常代码路径创建开销。
Like how he uses extension methods to allow what appears to be instance method calls on null objects. Very clever bit of coding IMO.
If you are sold on DbC, Google Spec# and PostSharp.
作为已经给出的答案的替代方案,值得研究Null Object design pattern
.
这种设计模式的本质是,一旦创建了“null 对象”,就不需要再对 null 执行任何检查,并且 null 对象的方法实现了无论何时传递 null(否则)所需的行为 vs对“真实对象”的引用。
这种设计模式不依赖于 C# 4.0,实际上几乎可以用任何 OO 编程语言轻松实现。
I have just started using Code Contracts its a new feature in C# 4.0 you need to download an addin from MS to allow you to see it in your project settings. Details here -> http://research.microsoft.com/en-us/projects/contracts/