我刚刚开始在现有的中型项目上使用.NET 4中的CodeContracts进行试验,但令我感到惊讶的是,静态检查器向我发出了有关以下代码段的编译时警告:
public class Foo
{
private readonly List<string> strs = new List<string>();
public void DoSomething()
{
// Compiler warning from the static checker:
// "requires unproven: source != null"
strs.Add("hello");
}
}
为什么CodeContracts静态检查器提示strs.Add(...)行?没有可能将str设为null,对吗?难道我做错了什么?
最佳答案
该字段可能被标记为readonly
,但是不幸的是,静态检查器还不够智能。因此,由于静态检查器无法自行推断strs
永远不会为null,因此必须通过不变式明确地告诉它:
[ContractInvariantMethod]
private void ObjectInvariant() {
Contract.Invariant(strs != null);
}
关于c# - CodeContracts-误报,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3484700/