Essential C# Equals and GetHashCode  Suggest an edit

Writing a good GetHashCode override

GetHashCode has major performance effects on Dictionary<> and HashTable.

Good GetHashCode Methods

A good method to implement GetHashCode is to use one prime number as a starting value, and add the hashcodes of the fields of the type multiplied by other prime numbers to that:

public override int GetHashCode()
    unchecked // Overflow is fine, just wrap
        int hash = 3049; // Start value (prime number).

				// Suitable nullity checks etc, of course :)
        hash = hash * 5039 + field1.GetHashCode();
        hash = hash * 883 + field2.GetHashCode();
        hash = hash * 9719 + field3.GetHashCode();
        return hash;

Only the fields which are used in the Equals-method should be used for the hash function.

If you have a need to treat the same type in different ways for Dictionary/HashTables, you can use IEqualityComparer.

Table Of Contents
6 Equals and GetHashCode
22 Enum
107 Stream
108 Timers
  ↑ ↓ to navigate     ↵ to select     Esc to close