== Why is this an issue? The use of `==` to compare two objects is expected to do a reference comparison. That is, it is expected to return `true` if and only if they are the same object instance. Overloading the operator to do anything else will inevitably lead to the introduction of bugs by callers. [source,csharp] ---- public static bool operator ==(MyType x, MyType y) // Noncompliant: confusing for the caller { // custom implementation } ---- On the other hand, overloading it to do exactly that is pointless; that's what `==` does by default. [source,csharp] ---- public static bool operator ==(MyType x, MyType y) // Noncompliant: redundant { if (x == null) { return y == null; } return object.ReferenceEquals(x,y); } ---- === Exceptions * Classes with overloaded `operator +` or `operator -` are ignored. * Classes that implement `IComparable` or `IEquatable` most probably behave as value-type objects and are ignored. == Resources === Documentation * https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/reference-types[Reference types] * https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/operators/equality-operators[Equality operators] ifdef::env-github,rspecator-view[] == Implementation Specification (visible only on this page) === Message Remove this overload of "==". === Highlighting `==` == Comments And Links (visible only on this page) include::../comments-and-links.adoc[] endif::env-github,rspecator-view[]