Les mystères de Equals ...
Par Thierry Thoua,
lundi, juin 16 2008.
Lien permanent
.NET
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 ?
- Affichage de "True"
- Affichage de "False"
- Affichage de "touche pas à ça petit con ?" (Exception ...)
- 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 ?