是否为Contract.Ensures执行了静态检查?

时间:2013-01-24 10:19:00

标签: c# code-contracts

我无法理解为什么静态检查器说这个方法一切正常:

public static int GetNonNegativeValue()
{
    Contract.Ensures(Contract.Result<int>() >= 0);

    return -1;
}

静态检查已开启。

更新

这也没关系。

var i = Doer.GetNonNegativeValue();
Contract.Assert(i < 0);

2 个答案:

答案 0 :(得分:2)

当您在静态检查器的设置中激活“Infer Requires”时,似乎此警告消失了。

它将推断Contract.Requires(false)(“CodeContracts:Suggested requires:Contract.Requires(false);”)将使此方法“无效”,因为现在无法在不提出合同例外的情况下调用它。看起来合同检查器没有验证这种方法的Ensures,因为它无论如何都不会执行return语句。

BTW:激活或停用“Show squigglies”不会以任何方式改变此行为。我只能假设OP在测试时不会改变这个设置。

答案 1 :(得分:1)

您可能需要重新检查以下复选框,然后重建项目:

  

右键点击该项目 - &gt;属性 - &gt;代码合同 - &gt;显示波浪形

另外,请确保您的解决方案的Active Config(或特定项目的Build配置)与Configuration属性页中的Code Contracts匹配。