2011-05-31 22 views
6

W przykładzie this plakat nadpisał metodę kodu skrótu get. Rozumiem, że zostało to zrobione, aby zapewnić lepszą wartość skrótu dla zwróconego obiektu, aby zmniejszyć liczbę kolizji, a zatem zmniejszyć liczbę przypadków, w których będzie trzeba zadzwonić pod numer Equals().C# Przesłanianie metody GetHashCode

Co chciałbym wiedzieć, jest to, jak ten algorytm obliczono:

return 17 + 31 * CurrentState.GetHashCode() + 31 * Command.GetHashCode(); 

Czy istnieje szczególny powód, że liczby te były wybierane? Czy mógłbym po prostu wybrać moje własne liczby, aby je włożyć?

+1

Tylko dla informacji, kompilator MS C# (dla typów anon) używa zarodka '-1134271262" i mnożnika z '-1521134295". Po prostu mów " –

+0

@MarcGravell: Czy masz na to źródło? – DeepSpace101

+0

@ DeepSpace101 ILDASM; p –

Odpowiedz

4

Generalnie powinieneś wybierać liczby pierwsze. Pomaga to uniknąć otrzymania tej samej wartości mieszania dla różnych parametrów wejściowych.

Powiązane problemy