Подтвердить что ты не робот

Правильная реализация GetHashCode

Я хотел бы услышать от сообщества, как мне следует реализовать GetHashCode (или переопределить его) для моего объекта. Я понимаю, что мне нужно сделать это, если я переопределю метод equals. Я реализовал его довольно много раз, иногда просто называя базовый метод. Я понимаю, что мой объект должен равняться другому экземпляру объекта, если он содержит одни и те же детали (члены). Каков наилучший способ получить хеш-код от членов класса?

4b9b3361

Ответ 1

Скажем, ваш класс выглядит следующим образом:

class Frob {
    public string Foo { get; set; }
    public int Bar { get; set; }
    public double FooBar { get; set; }
}

Скажем, вы определяете equals так, что два экземпляра Frob равны, если их Foo и их Bar равны, но FooBar не имеет значения.

Затем вы должны определить GetHashCode в терминах Foo и Bar. Один из способов:

return this.Foo.GetHashCode() * 17 + this.Bar.GetHashCode();

В принципе, вы просто хотите включить все поля, которые входят в определение равенства. Один из способов - просто продолжать накапливать и умножать на 17, как я сделал. Это быстро, просто, правильно и обычно дает хорошее распространение.