J'ai un problème étrange et je n'ai pas d'indice pour en trouver la raison. Je vais essayer de décrire clairement mon problème.
J'ai une classe RTree, dans cette classe, je veux comparer deux rectangles (ici j'ai appelé enveloppe, elle contient minX, minY, maxX, maxY), donc nous avons une classe de comparaison comme suit :
private class AnonymousXComparerImpl : IComparer
{
public AnonymousXComparerImpl()
{ }
public int Compare(object o1, object o2)
{
IEnvelope ea = (IEnvelope)((IBoundable)o1).Bounds;
IEnvelope eb = (IEnvelope)((IBoundable)o2).Bounds;
double a = (ea.MinX + ea.MaxX) / 2d;
double b = (eb.MinX + eb.MaxX) / 2d;
return a > b ? 1 : a < b ? -1 : 0;
}
}
Avec ce comparateur, nous pouvons maintenir une ArrayList d'enveloppe et la trier facilement, les enveloppes sont ajoutées aléatoirement. Lorsque nous appelons le code suivant et que nous rencontrons l'icône
Impossible de trier car la méthode IComparer.Compare() renvoie des résultats des résultats incohérents. Soit une valeur n'est pas égale à elle-même lors de la comparaison, soit une valeur comparée à plusieurs reprises à une autre donne des résultats différents. résultats différents.
sortedChildBoundables.Sort(new AnonymousXComparerImpl());
Voilà ce qui est bizarre. Cette erreur ne se produit que dans .net 4.0 qui n'installe pas le VistualStudio. Si la machine a installé le VS ou le .net 4.5, ce problème ne peut plus se reproduire.
Dans ce cas, je n'arrive pas à comprendre pourquoi cela se produit. Si vous avez de l'expérience dans le débogage de ce genre de problème, je vous en serais reconnaissant.
Merci, Howard