Each implementation of Equals must fulfil the following requirements:

Implementations of GetHashCode:

See: Guidelines for Overloading Equals() and Operator ==

Writing a good GetHashCode override

Default Equals behavior.

Override Equals and GetHashCode on custom types

Equals and GetHashCode in IEqualityComparator