What does CompareTo() do? IComparable

本文关键字:do IComparable does CompareTo What | 更新日期: 2023-09-27 18:19:20

我正在使用IComparable和IComparer

In Student class:[IComparable]

    public int CompareTo(Student studentToCompare)
    {
        if (this.Number < studentToCompare.Number)
            return 1;
        else if (this.Number > studentToCompare.Number)
            return -1;
        else
            return 0;
    }

在StudentCompareName类中:[IComparer]

    public int Compare(Student x, Student y)
    {
        return string.Compare(x.Name, y.Name);
    }

使用Compare(Student x, Student y),我正在按名字对学生列表进行排序。

如果我不使用CompareTo()在学生类,我得到错误。

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

What does CompareTo() do? IComparable

我正在使用IComparable和IComparer

这就是混淆的来源。你只需要两个中的一个,而且它们很少在同一个类中实现。

实现

IComparable<T>是为了在一个对象和另一个对象之间进行自然的比较。在Student的情况下,这可能没有意义,因为有多种方法来比较学生。另一方面,对于像DateTime这样的东西,这是完全有意义的。

IComparer<T>意味着是一个自定义比较-所以有一个StudentNameComparer实现IComparer<Student>通过比较名称是有意义的,例如。

IComparable是一个接口,这意味着它定义了必须在继承类中实现的方法。这只是你对"Compare"对你的对象的意义的实现。

CompareTo定义了你的基本学生是"大于"、"小于"还是"等于"你的studentToCompare,你可以用任何你喜欢的标准来定义这些。

更多信息可在MSDN文档站点

找到

当你不写CompareTo时你得到错误的原因是因为如果你没有一个,你的类实际上不会实现IComparable