What are the best practices for implementing the == operator for a class in C#?
c#, equals-operator, operators
Solution
I would follow Microsoft's Guidelines for Overloading Equals() and Operator ==.
edit: Microsoft's guidelines contain this important remark, which seems to confirm Henk's answer:
By default, the operator == tests for reference equality by determining if two references indicate the same object, so reference types do not need to implement operator == in order to gain this functionality. When a type is immutable, meaning the data contained in the instance cannot be changed, overloading operator == to compare value equality instead of reference equality can be useful because, as immutable objects, they can be considered the same as long as they have the same value. Overriding operator == in non-immutable types is not recommended
Problem
While implementing an `==` operator, I have the feeling that I am missing some essential points. Hence, I am searching some best practices around that. Here are some related questions I am thinking about: - How to cleanly handle the reference comparison? - Should it be implemented through a `IEquatable<T>`-like interface? Or overriding `object.Equals`? - And what about the `!=` operator? (this list might not be exhaustive).