用合同验证传递的参数?

时间:2014-09-04 11:13:21

标签: c# code-contracts system.diagnostics

通常,当我想检查是否,让我们说构造函数参数已初始化时,我这样做:

public MyCtor(MyObj obj) {
    if(obj == null)
        throw new ArgumentNullException("obj");
}

但是最近我在 System.Diagnostics 名称空间中找到了这个不错的功能:

Contract.Requires<ArgumentNullException>(condition);

这有同样的效果吗?使用 Contracts 验证参数时是否有任何缺点?

1 个答案:

答案 0 :(得分:2)

是的,除非:

  

您必须启用运行时检查才能使用Requires方法。

(来自MSDN)。如何打开它的说明必须在某个地方here

另一种选择是CuttingEdge.Conditions

Condition.Requires(obj).IsNotNull();
Condition.Requires(myIntValue).IsGreaterThan(0);
Condition.Requries(myString).IsNotNullOrWhitespace();

更多关于codeplex

这做同样的工作,但语法更简单,更human可读(在我看来) - 所以没有缺点(但记住:它基于意见)。自从我发现以来一直使用它:)