CompareTo()做什么? IComparable的

时间:2013-06-20 18:31:29

标签: c# icomparable

我正在使用IComparable和IComparer

在学生班:[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);
    }

通过比较(学生x,学生y),我正在按姓名排序学生名单。

如果我在Student-class中没有使用CompareTo(),我会收到错误。

我想知道为什么我需要在我的主(学生)课程中有一个CompareTo(),它有什么作用?为什么我需要先在Student类中比较学生编号,之后我可以在StudentCompareName类中对名称进行排序?

3 个答案:

答案 0 :(得分:5)

  

我正在使用IComparable和IComparer

这是混乱的根源。你只需要两个中的一个 - 它们很少在同一个类中实现。

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

IComparer<T>是一种自定义比较 - 例如,通过比较名称来设置StudentNameComparer来实现IComparer<Student>是有意义的。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

CompareTo定义您的基础学生是否“大于”,“小于”或“等于”您的studentToCompare,并且您可以根据自己的任何条件定义这些。

可以在MSDN documentation site

找到更多信息

当你不写CompareTo时出现错误的原因是因为如果你没有写IComparable,那么你的班级实际上不会实现{{1}}