list.Sort ArgumentException错误:IComparer不返回0(null)

S. *_*ter 4 c# c#-3.0

我有以下问题,我无法弄清楚它来自哪里.我非常感谢你的帮助.

代码:

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

Pao*_*sco 8

实际上错误消息说:当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)