奇妙な問題があり、その理由を追跡する手がかりがありません。私の問題を明確に説明しようとします。
私は RTree クラスを持っています。このクラスでは、2 つの四角形を比較したいので (ここではエンベロープと呼び、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());
ここが奇妙な部分です。このエラーは、VistualStudio をインストールしない .net 4.0 でのみ発生します。マシンに VS または .net 4.5 がインストールされている場合、この問題は再現できません。
この場合、なぜそれが起こるのかわかりません。この種の問題をデバッグした経験があれば、とても助かります。
ありがとう、ハワード