CodeContracts:布尔条件求值为常数值,为什么?

时间:2015-02-11 11:09:52

标签: c# code-contracts

我收到此警告但无法解决问题...

  

CodeContracts:warning:布尔条件d1.Count!=   d2.Count始终计算为常量值。如果它(或否定)   出现在源代码中,您可能有一些死代码或冗余代码   检查

代码如下:

public static bool DictionaryEquals<TKey, TValue>(IDictionary<TKey, TValue> d1, IDictionary<TKey, TValue> d2)
{
    if (d1 == d2) return true;
    if (d1 == null || d2 == null) return false;
    if (d1.Count != d2.Count) return false; // <-- warning here

    // Equality check goes here

    return true;
}

// Equality check goes here部分可以按原样,或由a proper implementation替换,我仍会收到相同的警告。

1 个答案:

答案 0 :(得分:5)

这只是代码合同中的一个错误。很容易编造使这种情况成为真或假的输入。警告是假的。

根据个人经验,我知道CC中的错误并不罕见。

如何解决?由于这是一个错误,因此没有官方/预期的行动方案。报告错误。微笑代码直到警告消失(例如,尝试ReferenceEquals,这是更好的风格)。取消警告。这样的事情。