CodeContracts:布尔条件的计算结果为常数值,为什么?

CodeContracts: Boolean condition evaluates to a constant value, why?

我收到此警告但无法找出问题...

CodeContracts: warning: The Boolean condition d1.Count != d2.Count always evaluates to a constant value. If it (or its negation) appear in the source code, you may have some dead code or redundant check

代码如下:

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,但我仍然收到相同的警告。

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

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

如何解决?由于这是一个错误,因此没有 official/intended 行动方案。报告错误。调整代码直到警告消失(例如,尝试 ReferenceEquals 无论如何这是更好的风格)。抑制警告。诸如此类。