#404 – Equals Method vs. == Operator for Value Types
September 5, 2011 Leave a comment
In C#, you can compare two objects for equality by using the Equality operator (==) or by calling the Equals method. For built-in value types, the default behavior checks for value equality, or equivalence.
int i1 = 42; int i2 = 42; bool check1 = i1 == i2; // true bool check2 = i1.Equals(i2); // true bool check3 = int.Equals(i2, i2); // true
For the predefined value types (e.g. int, float):
- The Equals method performs a value equality check
- The == operator resolves to the CIL ceq instruction, which does a strict identity check
For user-defined struct types:
- The Equals method implementation performs a value equality check by comparing each field of the struct (using reflection). You can (and should) override Equals to provide an implementation specific to the struct.
- The == operator is undefined, unless you override it in the struct.