Even if I know how/when to overload operator==, WHY should i do it?
<p>Assuming I am designing a collection of objects for use by others and assuming I have read and understood (huh?) most threads about the differences between operator== and Equals(), <em>WHY</em> should I ever implement operator==?</p>

<p>Stealing an example from <a href="http://stackoverflow.com/questions/1766492/c-sharp-overloading-operator-versus-equals">this thread</a>, using it can be quite error prone:</p>

<pre><code>object x = "hello";
object y = 'h' + "ello"; // ensure it's a different reference
(x == y); // evaluates to FALSE
string x = "hello";
string y = 'h' + "ello"; // ensure it's a different reference
(x == y); // evaluates to TRUE
</code></pre>

<p>So, can I tell my users to just use Equals() and ReferenceEquals() and that's it? What am I missing there? </p>

<ul>
<li><p>Are there maybe pieces of the standard code base that use == and there is no way around it? </p></li>
<li><p>Is the == performance a lot better in some <em>important</em> cases? (well, ok, Equals is a virtual so it's gonna be a bit slower all the time, but i cannot see any use case where this actually becomes a bottleneck)</p></li>
<li>something else?</li>
</ul>
