我无法理解为什么静态检查器说这个方法一切正常:
public static int GetNonNegativeValue()
{
Contract.Ensures(Contract.Result<int>() >= 0);
return -1;
}
静态检查已开启。
更新
这也没关系。
var i = Doer.GetNonNegativeValue();
Contract.Assert(i < 0);
答案 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
匹配。