请考虑以下代码:
public class RandomClass
{
private readonly string randomString;
public RandomClass(string randomParameter)
{
Contract.Requires(randomParameter != null);
Contract.Ensures(this.randomString != null);
this.randomString = randomParameter;
}
public string RandomMethod()
{
return // CodeContracts: requires unproven: replacement != null
Regex.Replace(string.Empty, string.Empty, this.randomString);
}
}
这确保randomString
执行RandomMethod
时不会为空CodeContracts: requires unproven: replacement != null
。为什么代码合同分析忽略了这个事实并抛出{{1}}警告?
答案 0 :(得分:4)
分析器可能忽略了它无法在两种方法之间建立联系的事实。
属性“field randomString is null”是类不变:它是在每次创建实例时建立的,并且在每次方法调用时都会保留,因为该字段是只读的。我恳请你提供一个陈述。它将很容易被分析仪验证,并提供必要的假设来证明RandomMethod
是安全的。
This page对类不变量有一个很好的解释。