Les mystères de Equals ...

Voici un petit bout de code ....
ArrayList array = new ArrayList();
ConstructorInfo constructor = typeof(CompilerInfo).GetConstructor(
BindingFlags.Instance | BindingFlags.NonPublic, null, new Type[0], 
null);
array.Add(constructor.Invoke(null));
object column = new object();
array.Add(column);
Console.WriteLine(array.Contains(column));
Quel est le résultat à l'écran ?
  1. Affichage de "True"
  2. Affichage de "False"
  3. Affichage de "touche pas à ça petit con ?" (Exception ...)
  4. Rien ne s'affiche
La bonne réponse était le choix "3" ... Je cherche à comprendre pourquoi certaines méthodes Equals du framework .Net sont remplies de bugs .... Evidement ce bug ne se retrouve pas dans Mono ... ;)
Il existe également d'autres classes qui lanceront une exception si on passe pas le même type à la méthode Equals associé à l'objet comme par exemple:
  • System.Data.DataKey
  • System.Web.Configuration.TagPrefixInfo
  • System.Web.Compilation.CompilerType
Ce post a pour but de mettre en garde toute implémentation utilisant les méthodes Equals du framework ;-( (et de loin ... du Contains etc ....). Je suis également très intéressé si vous avez d'autres bugs (...) que vous avez rencontré dans le passé ... Avez-vous trouvé une solution pour contourner ces problèmes ?

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.

Fil des commentaires de ce billet

Page top