Overriding GetHashCode

56,578

Solution 1

When you override GetHashCode() you also need to override Equals(), operator== and operator!= . And be very careful to meet all the requirements for those methods.

The guidelines are here on MSDN. Most important quote:

It is not a good idea to override operator == in mutable types.

Solution 2

If you use resharper it can generate the GetHashCode(), Equals and operator method bodies for you.

Access this menu by pressing Alt+Insert.

http://www.jetbrains.com/resharper/webhelp/Code_Generation__Equality_Members.html

Solution 3

In my personal usage, I only override when overriding equals method too. Generally, I do this for objects I know that I might run a LINQ to Objects query on, or some other comparison operation.

I usually return, if say a LINQ to SQL entity or DTO object, the primary key value. Whatever you return, if you don't store the value locally, it may produce an unexpected result.

HTH.

Solution 4

I would normally override hashcode and equality checking methods for data classes (i.e. classes where the value semantics makes sense). Have a look at this question for a common implementation. If you do override hashcode override equals. Using a GUID is a pretty terrible idea because you want two objects which are different instances but have the same value to have the same hashcode and for equals to return true.

Share:
56,578
0x2D
Author by

0x2D

Updated on November 25, 2020

Comments

  • 0x2D
    0x2D over 3 years

    As you know, GetHashCode returns a semi-unique value that can be used to identify an object instance in a collection. As a good practice, it is recommended to override this method and implement your own.

    My question is - do you override this method when working on custom objects? If so, what algorithm do you use to generate the unique ID?

    I was thinking about generating a GUID and then getting integer data from that identificator.