我不明白为什么静态检查器说这种方法一切正常:
public static int GetNonNegativeValue()
{
Contract.Ensures(Contract.Result<int>() >= 0);
return -1;
}
静态检查已开启。
更新:
这也可以。
var i = Doer.GetNonNegativeValue();
Contract.Assert(i < 0);
我不明白为什么静态检查器说这种方法一切正常:
public static int GetNonNegativeValue()
{
Contract.Ensures(Contract.Result<int>() >= 0);
return -1;
}
静态检查已开启。
更新:
这也可以。
var i = Doer.GetNonNegativeValue();
Contract.Assert(i < 0);
当您在静态检查器的设置中激活“推断需要”时,此警告似乎消失了。
它将推断Contract.Requires(false)
("CodeContracts: Suggested requires: Contract.Requires(false);") 这将使该方法“无效”,因为现在不能在不引发合同异常的情况下调用它。看起来合同检查器没有验证Ensures
这种方法,因为它无论如何都不会执行该return
语句。
顺便说一句:激活或停用“显示波浪线”不会以任何方式改变此行为。我只能假设 OP 在测试时不仅更改了此设置。
您可能需要重新选中以下复选框,然后重新构建项目:
右键单击项目 -> 属性 -> 代码合同 -> 显示曲线
此外,请确保您的解决方案Active Config
(或特定项目的Build
配置)与属性页中的Configuration
匹配Code Contracts
。