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
, который является лучшим стилем). Подавить предупреждение. Такие вещи.