Я хотел бы услышать от сообщества, как мне следует реализовать GetHashCode (или переопределить его) для моего объекта. Я понимаю, что мне нужно сделать это, если я переопределю метод equals. Я реализовал его довольно много раз, иногда просто называя базовый метод. Я понимаю, что мой объект должен равняться другому экземпляру объекта, если он содержит одни и те же детали (члены). Каков наилучший способ получить хэш-код от членов класса?Правильный ввод GetHashCode
ответ
Допустим, что ваш класс выглядит следующим образом:
class Frob {
public string Foo { get; set; }
public int Bar { get; set; }
public double FooBar { get; set; }
}
Допустим, вы определяете равно, так что два экземпляра Frob
равны, если их Foo
и их Bar
равны, но FooBar
не имеет значения.
Затем вы должны определить GetHashCode
с точки зрения Foo
и Bar
. Один из способов заключается в следующем:
return this.Foo.GetHashCode() * 17 + this.Bar.GetHashCode();
В принципе, вы просто хотите включить все поля, которые входят в определение равенства. Один из способов - просто продолжать накапливать и умножать на 17, как я сделал. Это быстро, это просто, это правильно, и это обычно дает хорошее распространение.
У меня такое чувство, что это должен быть вопрос сам, но почему 23? –
Основной фактор, чтобы сделать {2,1} и {1,2}, отличаются. –
может указывать на то, что GetHashCode сообщает только, что два объекта ** могут считаться равными. По-прежнему существует вероятность столкновения хэшей. – geofftnz
- 1. Правильный способ переопределить Equals() и GetHashCode()
- 2. Правильный ввод пользователя в Java
- 3. Java Sudoku правильный ввод номера
- 4. Реализация GetHashCode
- 5. Функциональность GetHashCode
- 6. GetHashCode Equality
- 7. Функция Gethashcode()
- 8. GetHashCode() с^
- 9. C# Пользовательский класс. Реализация GetHashCode
- 10. Chrome Автозаполнение не заполняет правильный ввод
- 11. C++ не удалось получить правильный ввод строки
- 12. C# Console.read() не отображает правильный ввод номера?
- 13. Tkinter - измените рамку, если правильный ввод информации
- 14. Правильный способ проверить ввод числовой в угловой
- 15. правильный ввод текста в следующую активность
- 16. Правильный ввод для уменьшения в PySpark
- 17. Принимая правильный ввод в массиве строк
- 18. Bootstrap-Правильный ввод вложенных столбцов сетки
- 19. Правильный ввод пользовательского ввода в python
- 20. Как уменьшить сложность GetHashCode
- 21. этот GetHashCode достаточно хорош?
- 22. Почему foreach вызывает GetHashCode?
- 23. CInt и GetHashCode
- 24. GetHashCode для аналогичных значений
- 25. Как отменить GetHashCode
- 26. GetHashCode метод расширение
- 27. GetHashCode перерывы код
- 28. Чувствительность к культуре GetHashCode
- 29. Компилятор Сгенерированный GetHashCode()
- 30. Хлопок GetHashCode Tuple's
Рассмотрите возможность закрытия как дубликат http://stackoverflow.com/a/720282/93922 –
Прежде чем это сделать, я рекомендую вам прочитать и понять мою статью: http://blogs.msdn.com/b /ericlippert/archive/2011/02/28/guidelines-and-rules-for-gethashcode.aspx –
Спасибо, я понимаю, что это может быть общий вопрос, и я должен был сделать немного больше охоты вокруг. Спасибо за вашу помощь – Zivka