Ответ 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, как я сделал. Это быстро, просто, правильно и обычно дает хорошее распространение.