我有一个奇怪的问题,我没有线索来追踪原因。我会尽量清楚地描述我的问题。
我有一个 RTree 类,在这个类中,我想比较两个矩形(这里我称为信封,它包含 minX、minY、maxX、maxY),所以我们有一个比较器类如下:
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;
}
}
使用这个比较器,我们可以维护一个信封的 ArrayList 并轻松对其进行排序,信封是随机添加的。当我们调用以下代码时,我们遇到了
无法排序,因为 IComparer.Compare() 方法返回不一致的结果。一个值与自身比较不相等,或者一个值与另一个值重复比较会产生不同的结果。
sortedChildBoundables.Sort(new AnonymousXComparerImpl());
这是奇怪的部分。此错误仅发生在未安装 VisualStudio 的 .net 4.0 中。如果机器安装了 VS 或 .net 4.5,则此问题无法再次出现。
在这种情况下,我无法弄清楚它为什么会发生。如果您对调试此类问题有任何经验,那就太好了,我很感激。
谢谢,霍华德