CodeContracts: логическое условие оценивается с постоянным значением, почему?

Я получаю это предупреждение, но не могу понять проблему...

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 может быть как есть или заменена на правильную реализацию, и я все равно получаю то же предупреждение.

Ответ 1

Это просто ошибка в кодовых контрактах. Легко подсчитать входы, которые делают это условие истинным или ложным. Предупреждение является фиктивным.

Из личного опыта я знаю, что ошибки в CC не редкость.

Как исправить? Поскольку это ошибка, нет официального/намеченного курса действий. Сообщите об ошибке. Перемещайте код до тех пор, пока предупреждение не исчезнет (например, попробуйте ReferenceEquals, который является лучшим стилем). Подавить предупреждение. Такие вещи.