Ich habe ein seltsames Problem und ich habe keine Ahnung, um den Grund zu verfolgen. Ich werde versuchen, mein Problem klar zu beschreiben.IComparer Ausgabe
ich eine RTree Klasse haben, in dieser Klasse, möchte ich zwei rectanlge vergleichen (ich hier genannt Umschlag, es enthält minX, minY, maxX, maxY), so haben wir eine comparer Klasse wie folgt:
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;
}
}
Mit diesem Vergleich können wir eine ArrayList der Hülle pflegen und leicht sortieren, die Umschläge werden nach dem Zufallsprinzip hinzugefügt. Wenn wir rufen Sie den folgenden Code und wir trafen die
konnte nicht sortieren, weil die IComparer.Compare() -Methode inkonsistente Ergebnisse. Entweder vergleicht sich ein Wert nicht mit sich selbst, oder ein Wert, der wiederholt mit einem anderen Wert verglichen wird, ergibt andere Ergebnisse.
sortedChildBoundables.Sort(new AnonymousXComparerImpl());
Hier ist der seltsame Teil. Dieser Fehler tritt nur in .NET 4.0 auf, das das VisualStudio nicht installiert. Wenn der Computer VS oder .NET 4.5 installiert hat, kann dieses Problem nicht erneut auftreten.
In diesem Fall kann ich nicht herausfinden, warum es passiert. Es wird großartig sein, wenn Sie irgendwelche Erfahrung im Debuggen dieser Art von Problem haben, schätze ich.
Danke, Howard
Das einzige, was ich hier denken kann, sind Gleitkomma-Probleme, was bedeutet, dass die Gleichheit für die gleichen Elemente nicht ganz übereinstimmt, keine Ahnung, warum es für v4 spezifisch wäre. Haben Sie versucht, ein Rundungsniveau durchzusetzen? –
Versuchen Sie es mit dem Dezimal-Datentyp anstelle der Doppel – Saravanan
Es gibt keine anderen Threads beteiligt sind dort? Auch dieser Thread könnte von Interesse sein: http://stackoverflow.com/questions/6683059/are-floating-point-numbers-consistent-in-c-can-they-be –