Looking for c# Answers? Try Ask4KnowledgeBase
Looking for c# Keywords? Try Ask4Keywords

C# LanguageРавные и GetHashCode


замечания

Каждая реализация Equals должна соответствовать следующим требованиям:

  • Рефлексивный : объект должен быть равен самому себе.
    x.Equals(x) возвращает true .

  • Симметрично : нет разницы, если я сравниваю x с y или y с x - результат тот же.
    x.Equals(y) возвращает то же значение, что и y.Equals(x) .

  • Транзитив : если один объект равен другому объекту, и он равен третьему, первый должен быть равен третьему.
    if (x.Equals(y) && y.Equals(z)) возвращает true , тогда x.Equals(z) возвращает true .

  • Согласовано : если вы сравниваете объект с другим несколько раз, результат всегда один и тот же.
    Последовательные вызовы x.Equals(y) возвращают одно и то же значение, если объекты, на которые ссылаются x и y, не изменяются.

  • Сравнение с null : ни один объект не равен null .
    x.Equals(null) возвращает false .

Реализации GetHashCode :

  • Совместимость с Equals : если два объекта равны (это означает, что Equals возвращает true), то GetHashCode должен возвращать одинаковое значение для каждого из них.

  • Большой диапазон : если два объекта не равны ( Equals говорит false), должна быть высокая вероятность, что их хэш-коды различны. Идеальное хеширование часто невозможно, так как существует ограниченное количество значений на выбор.

  • Дешево : во всех случаях вычислять хеш-код должно быть недорого.

См. Руководство по перегрузке Equals () и оператору ==

Равные и GetHashCode Связанные примеры