静态检查器未证明参数!= null

Static Checker not proving parameters != null

当我了解代码契约时,我认为我可以做到以下几点:

public void ContractTest(string input)
{
    Contract.Requires(input != null);
}

public void ContractTestCaller(string input)
{
    this.ContractTest(input);
}

并收到警告,因为无法在 ContractTestCaller 中证明 input != null。但是我没有收到警告。
然后我想我这样做时至少会收到警告:

public void ContractTestCallerCaller()
{
    this.ContractTestCaller(null);
}

但还是没有。

我看到三种不同的可能性:

  1. 我做错了什么。
  2. 代码合同不应该这样做。
  3. 静态检查器不是很好。

是哪一个?

这是我的设置:

原来问题是检查了 "Infer Requires" 选项。我不完全明白为什么,但是当我关闭它时它会起作用。

我也发现这个 link 指的是同样的问题:
https://github.com/Microsoft/CodeContracts/issues/439