I've amassed a little collection of oddities and brain teasers, and I'm always interested in hearing more. The page mostly focuses on C# language details, but I'm also interested in core.NET topics. For instance, here's one that isn't on the page but that I think is amazing:
string x = new string(new char[0]);
string y = new string(new char[0]);
Console.WriteLine(object.ReferenceEquals(x, y));
That should print False, right? After all, doesn't "new" (with a reference type) always generate a new object? It should, according to the specifications for both C# and the CLI. In this case, however, that is not the case. It prints True on every version of the framework with which I've tested it. (Admittedly, I haven't tried it on Mono...)
To be clear, this is just an example of what I'm looking for; I wasn't seeking for a debate or explanation of this peculiarity. (String interning isn't the same as regular string interning; string interning doesn't usually happen when a function Object() { [native code] } is invoked.) I was actually hoping for the same strange behaviour.
Are there any more hidden gems out there?