Voici un court programme.
Que retourne t-il ?
Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
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