GetHashCode – tak bardzo YOLO

Zawiodłem się

Zawiodłem się na GetHashCode, zawiodłem dwa razy 😏 – tak mi się wydaje. Po dwakroć dałem się zrobić w balona, mam nadzieje, że trzeciego razu nie będzie i stąd także ten wpis.

GetHashCode

Liczy hash z obiektu, który dostał, ma to zrobić szybko i zwrócić ten sam hash code dla tego samego obiektu (dokumentacja: https://docs.microsoft.com/en-us/dotnet/api/system.object.gethashcode?view=netcore-3.1)
Robi to, o co prosisz, patrz na kod:

Uruchomiony daje takie wyniki:

42
42
595726643
595726643
-345413569
-345413569

Jeszcze raz, zrób to jeszcze raz!

Czyli co, dla cyferek zwraca cyferkę, ale stringów unikatową dla nich cyferkę, dla obiektów także. Gdy zapomnisz tego, co ja i oprzesz swoją unikatowość na hash code, jak bardzo się zdziwisz i 🤦‍♂️ gdy po ponownym uruchomieniu zobaczysz taki wynik:

42
42
886905884
886905884
-54234328
-54234328

Cyferki dla cyferek, yolo dla obiektów.

Mądrość

Jarek – pamiętaj, GetHashCode yolo!
Twórz samodzielnie sumy (SHA256/MD5), albo nadpisuj GetHashCode. Nie opieraj swojej aplikacji i bazy danych na wartościach z domyślnej wartości (implementacji) GetHashCode, przy każdym uruchomieniu masz inny seed. Jeśli chcesz, nadpisz i upewnij się, że zawsze te same obiekty mają ten sam hashcode, nie ważne kiedy zostaną powołane do życia

A jeśli zapomnisz o tym i zrobisz fupa jak moje, wróć i przybij mi wirtualną piątkę 🙋‍♂️🙋‍♀️

Dziękuje za uwagę i życzę miłego dnia! 🌞

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.