#420 – Laundry List for Implementing Value Equality and IComparable
September 27, 2011 4 Comments
To implement value equality (equivalence) in a reference type, you should do the following:
- Override Object.Equals
- In Object.Equals, call the type-specific Equals method using the as operator
- Implement IEquatable<T> by adding a type-specific Equals method
- Check for null using ReferenceEquals method
- Call base class’ Equals method to compare fields that exist in the base class if it also checks for value equality
- Check for equivalence by comparing individual fields
- Override GetHashCode, generating a hash code based on fields used for equivalence
- Overload == operator
- Check for 1st parameter being null, compare to 2nd parameter
- Call 1st parameter’s type-specific Equals method
- Overload != operator, invoking the == operator
- Implement IComparable<T>, adding a CompareTo method
- Check for equivalence using Equals method, then compare individual fields
- Overload < and > operators
- Check for 1st parameter being null
- Call 1st parameter’s CompareTo method
- Overload <= and >= operators
- Calculate a result using the <, > and == operators
Typo: “Equalsmethod” → ‘Equals method’
Typo: “CompareTomethod” → ‘CompareTo method’
Good summary! I’ve bookmarked this page for future reference.
Thanks–I created the list because I knew I’d forget much of it 10 mins after knowing it. :O)