CompareTo()做什么?IComparable的

Swa*_*wag 1 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;
    }
Run Code Online (Sandbox Code Playgroud)

在StudentCompareName类中:[IComparer]

    public int Compare(Student x, Student y)
    {
        return string.Compare(x.Name, y.Name);
    }
Run Code Online (Sandbox Code Playgroud)

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

如果我不在Student-class中使用CompareTo(),我会收到错误.

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

Jon*_*eet 5

我正在使用IComparable和IComparer

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

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

IComparer<T>意味着要进行自定义比较 - 例如,通过比较名称StudentNameComparer来实现哪个实现是有意义的IComparer<Student>.