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

ant*_*tak 11 c# code-contracts

我收到了这个警告,但无法弄清楚问题......

CodeContracts:警告:布尔条件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;
}
Run Code Online (Sandbox Code Playgroud)

// Equality check goes here部分可以按原样,或由适当的实现替换,我仍然得到相同的警告.

usr*_*usr 5

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

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

怎么修?由于这是一个错误,因此没有官方/预期的行动方案.报告错误.微笑代码直到警告消失(例如,尝试ReferenceEquals哪种风格更好).取消警告.像这样的东西.