[CLR .Net 2]Relation entre GetHashCode() et Equals()
Voici un court programme.
Que retourne t-il ?
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| // On récupère un MemberInfo, n'importe laquelle
MemberInfo mi1 = typeof(XmlDocument).GetMethod("ToString");
// On récupère son module et son MetadataToken
Module module = mi1.Module;
int token = mi1.MetadataToken;
// On retrouve le MemberInfo dans le module, grâce au token
MemberInfo mi2 = module.ResolveMember(token);
// et là... j'hallucine
Console.WriteLine((mi1 == mi2) + " = (mi1 == mi2)");
Console.WriteLine((mi1.Equals(mi2)) + " = (mi1.Equals(mi2))");
Console.WriteLine(MemberInfo.ReferenceEquals(mi1, mi2) + " = (MemberInfo.ReferenceEquals(mi1, mi2)");
Console.WriteLine((mi1.GetHashCode() == mi2.GetHashCode()) + " = (mi1.GetHashCode() == mi2.GetHashCode()");
Console.ReadLine(); |
Réponse :
Faux
Faux
Faux
Vrai
Quelqu'un peut m'expliquer comment c'est possible ?
Mose, très énervé contre MS qui sait pas gérer la compatiblité ascendante