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

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

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

代码如下:

public static bool DictionaryEquals(IDictionary d1, IDictionary 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部分可以按原样,或者由适当的实现替换,我仍然得到相同的警告。

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

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

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