我刚刚开始在现有的中型项目上使用.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/

10-13 02:32