2

我不明白为什么静态检查器说这种方法一切正常:

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

    return -1;
}

静态检查已开启。

更新:

这也可以。

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

2 回答 2

2

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

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

顺便说一句:激活或停用“显示波浪线”不会以任何方式改变此行为。我只能假设 OP 在测试时不仅更改了此设置。

于 2013-01-24T10:22:16.280 回答
1

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

右键单击项目 -> 属性 -> 代码合同 -> 显示曲线

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

于 2013-01-24T10:28:56.513 回答