我有一个奇怪的问题,我没有线索来追踪原因。我会尽量清楚地描述我的问题。IComparer问题
我有一个RTREE类,在这个类,我想比较两个rectanlge(这里我叫信封,它包含了minX,MINY,maxX的,美星),所以我们有一个比较器类如下:
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());
这里是怪异的一部分。此错误只出现在不安装VistualStudio的.net 4.0中。如果机器安装了VS或.net 4.5,则此问题无法再次重新生成。
在这种情况下,我不知道为什么会发生。如果你有任何关于调试这类问题的经验,那将是非常棒的,我很欣赏。
感谢, 霍华德
我能想到的唯一的事情就是浮点问题,意思是相同的项目并不完全匹配,不知道为什么它会特定于v4。你是否尝试过强化四舍五入? – 2013-05-08 07:52:51
尝试使用'decimal'数据类型代替双精度 – Saravanan 2013-05-08 07:55:51
有没有其他线程参与?此外,这个线程可能是有趣的:http://stackoverflow.com/questions/6683059/are-floating-point-numbers-consistent-in-c-can-they-be – 2013-05-08 07:56:42