代码合同错误?泛型方法和值类型中表达式中元素的顺序

时间:2013-07-30 18:59:11

标签: c# generics code-contracts value-type

考虑以下代码,使用代码契约静态分析编译:

void TestGood<T>(T arg)
{
    Contract.Requires(arg != null);
}

void TestBad<T>(T arg)
{
    Contract.Requires(null != arg);
}

void RunTest()
{
    TestGood(Guid.Empty); // No warnings
    TestBad(Guid.Empty);  // Warning - "CodeContracts: requires unproven: null != arg"
}

看起来二进制==表达式中参数的顺序很重要,这没有多大意义。

它不仅限于Guid类型。例如,struct MyStruct { }给出相同的行为。

奇怪的是,如果我们传递内置数字类型(例如int0),则没有警告。

所以问题是:

  1. 是否有任何理由要求TestBad发出警告?
  2. 如果没有,这是代码合同静态分析器中的错误吗?

  3. 在Visual Studio 2012中使用代码合同版本1.5.60502.11。这是a screenshot showing the settings used。另外,正如我所建议的那样,我在code contracts user forum中提出了同样的问题。

0 个答案:

没有答案