静态检查器未证明参数!= 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);
}
但还是没有。
我看到三种不同的可能性:
- 我做错了什么。
- 代码合同不应该这样做。
- 静态检查器不是很好。
是哪一个?
这是我的设置:
原来问题是检查了 "Infer Requires" 选项。我不完全明白为什么,但是当我关闭它时它会起作用。
我也发现这个 link 指的是同样的问题:
https://github.com/Microsoft/CodeContracts/issues/439
当我了解代码契约时,我认为我可以做到以下几点:
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);
}
但还是没有。
我看到三种不同的可能性:
- 我做错了什么。
- 代码合同不应该这样做。
- 静态检查器不是很好。
是哪一个?
这是我的设置:
原来问题是检查了 "Infer Requires" 选项。我不完全明白为什么,但是当我关闭它时它会起作用。
我也发现这个 link 指的是同样的问题:
https://github.com/Microsoft/CodeContracts/issues/439