Je collectionne quelques cas particuliers et casse-tête et j'aimerais toujours en savoir plus. La page ne couvre que les éléments du langage C#, mais je trouve également que les éléments de base de .NET sont intéressants. Par exemple, en voici une qui ne figure pas sur la page, mais que je trouve incroyable :
string x = new string(new char[0]);
string y = new string(new char[0]);
Console.WriteLine(object.ReferenceEquals(x, y));
Je m'attendrais à ce qu'il s'imprime False - après tout, "new" (avec un type de référence) toujours crée un nouvel objet, n'est-ce pas ? Les spécifications de C# et de l'interface de programmation indiquent que c'est le cas. Eh bien, pas dans ce cas particulier. Elle affiche True, et l'a fait sur toutes les versions du framework avec lesquelles je l'ai testée. (Je ne l'ai pas testé sur Mono, il est vrai...)
Pour être clair, il s'agit seulement d'un exemple du genre de chose que je recherche - je ne cherchais pas particulièrement à discuter/expliquer cette bizarrerie. (Ce n'est pas la même chose que l'interfaçage normal de chaînes de caractères ; en particulier, l'interfaçage de chaînes de caractères ne se produit pas normalement lorsqu'un constructeur est appelé). Je demandais en fait un comportement étrange similaire.
D'autres perles se cachent-elles dans les environs ?