我有以下问题,我无法弄清楚它来自哪里.我非常感谢你的帮助.
代码:
List<Point> lst = new List<Point>();
lst.Add(new Point(0, -2));
lst.Add(new Point(-1, -2));
lst.Sort(delegate (Point x,Point y)
{
if (x.X == 0)
return -1;
else if (y.X == 0)
return 1;
else
{
double retVal1 = x.Y * 1.0 / -x.X;
double retVal2 = y.Y * 1.0 / -y.X;
int retVal = -Math.Sign(retVal1 - retVal2);
return retVal;
}
});
Run Code Online (Sandbox Code Playgroud)
如果执行,我收到一个ArgumentException,说IComparer没有返回0(null).但是,除了-1,0和1之外,它实际上不能返回任何其他内容,或者?
非常感谢您的帮助!
啊,顺便说一句,我使用的是.NET 3.5
实际上错误消息说:当Array.Sort调用x时,IComparer(或它所依赖的IComparable方法)没有返回零.的CompareTo(X).x:''x'的类型:'Point'IComparer:'System.Array + FunctorComparer`1 [System.Drawing.Point]'.
如果对象相同,则必须返回0:
lst.Sort(delegate(Point x, Point y) {
if (x.X == y.X && x.Y == y.Y) { // you are missing this
return 0;
}
if (x.X == 0)
return -1;
else if (y.X == 0)
return 1;
else {
double retVal1 = x.Y * 1.0 / -x.X;
double retVal2 = y.Y * 1.0 / -y.X;
int retVal = -Math.Sign(retVal1 - retVal2);
return retVal;
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1959 次 |
| 最近记录: |