Прочитав все вопросы и ответы по StackOverflow относительно переопределения GetHashCode()
, я написал следующий метод расширения для легкого и удобного переопределения GetHashCode()
:
public static class ObjectExtensions
{
private const int _seedPrimeNumber = 691;
private const int _fieldPrimeNumber = 397;
public static int GetHashCodeFromFields(this object obj, params object[] fields) {
unchecked { //unchecked to prevent throwing overflow exception
int hashCode = _seedPrimeNumber;
for (int i = 0; i < fields.Length; i++)
if (fields[i] != null)
hashCode *= _fieldPrimeNumber + fields[i].GetHashCode();
return hashCode;
}
}
}
(Я в основном рефакторизую код, который кто-то разместил там, потому что мне очень нравится, что его можно использовать вообще)
который я использую следующим образом:
public override int GetHashCode() {
return this.GetHashCodeFromFields(field1, field2, field3);
}
Вы видите какие-либо проблемы с этим кодом?