C# CompareTo()做什么?不可比

C# CompareTo()做什么?不可比,c#,icomparable,C#,Icomparable,我正在使用IComparable和IComparer 在学生课堂上:[i可比较] public int CompareTo(Student studentToCompare) { if (this.Number < studentToCompare.Number) return 1; else if (this.Number > studentToCompare.Number) retur

我正在使用IComparable和IComparer

在学生课堂上:[i可比较]

    public int CompareTo(Student studentToCompare)
    {
        if (this.Number < studentToCompare.Number)
            return 1;
        else if (this.Number > studentToCompare.Number)
            return -1;
        else
            return 0;
    }
    public int Compare(Student x, Student y)
    {
        return string.Compare(x.Name, y.Name);
    }
通过比较(学生x,学生y),我将学生名单按姓名进行排序

如果我在学生课堂上不使用CompareTo(),我就会出错


我想知道为什么我的主课(学生课)上需要一个CompareTo(),它做什么?为什么我需要首先比较student类中的学生编号,然后才允许在StudentCompareName类中按名称排序?

IComparable
是一个,这意味着它定义了必须在继承类中实现的方法。它只是您对对象的“比较”含义的实现。

IComparable
是一个,这意味着它定义了必须在继承类中实现的方法。这只是你对“比较”对你的对象意味着什么的实现

我正在使用IComparable和IComparer

这就是混乱的根源。您只需要其中一个,而且它们很少在同一个类中实现


IComparable
用于在一个对象和另一个对象之间进行自然比较。对于像
Student
这样的情况,这可能没有意义,因为有多种方法可以比较学生。另一方面,对于像
DateTime
这样的东西来说,它非常有意义

IComparer
是一种自定义比较,因此有一个
StudentNameComparer
是有意义的,它通过比较名称来实现
IComparer

我正在使用IComparable和IComparer

这就是混乱的根源。您只需要其中一个,而且它们很少在同一个类中实现


IComparable
用于在一个对象和另一个对象之间进行自然比较。对于像
Student
这样的情况,这可能没有意义,因为有多种方法可以比较学生。另一方面,对于像
DateTime
这样的东西来说,它非常有意义


IComparer
是一种自定义比较-因此有一个
StudentNameComparer
是有意义的,它通过比较名称来实现
IComparer

CompareTo
定义基础学生是“大于”、“小于”还是“等于”你的
studentToCompare
,你可以用任何你喜欢的标准来定义它们

有关更多信息,请访问


当您没有编写
比较器时出错的原因是,如果您没有比较器,您的类实际上不会实现
IComparable

比较器
定义基础学生是“大于”、“小于”还是“等于”您的
学生比较器
,你可以用任何你喜欢的标准来定义它们

有关更多信息,请访问


当您没有编写
比较器时出错的原因是,如果您没有比较器,您的类实际上不会实现
IComparable

您能更彻底地定义“我出错了”吗?您能定义“我出错了”吗更彻底一点?这样说有意义吗:
IComparable
可用于将一个实例与另一个实例进行比较,而用于自定义比较的
icomparaer
可用于将两个实例进行比较的
StudentNameComparier
。这样可以吗?@DarthVader:No-
StudentNameComparer
不会使用
IComparer
,而是
IComparer
。它将被类似于排序的东西使用。这就是我的意思,明白了。同时,你可以这样建议:我使用了一个IComparer并创建了它的一个实例。StudentNameComparer snc=新建StudentNameComparer()。在那之后,我列出了students.Sort(snc)。那好吗?@xVizzi:是的,那很好。说:
IComparable
可以用来比较一个实例和另一个实例,而用于自定义比较的
icomparaer
可以用在一个
StudentNameComparer
中,它接受两个实例并比较它们。这样可以吗?@DarthVader:No-
StudentNameComparer
不会使用
IComparer
,而是
IComparer
。它将被类似于排序的东西使用。这就是我的意思,明白了。同时,你可以这样建议:我使用了一个IComparer并创建了它的一个实例。StudentNameComparer snc=新建StudentNameComparer()。在那之后,我列出了students.Sort(snc)。那好吗?是的,很好。