我正在使用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类中对名称进行排序?
答案 0 :(得分:5)
我正在使用IComparable和IComparer
这是混乱的根源。你只需要两个中的一个 - 它们很少在同一个类中实现。
IComparable<T>
用于在一个对象和另一个对象之间进行自然比较。在类似Student
的情况下,这可能没有意义,因为有多种方法可以比较学生。另一方面,对于像DateTime
这样的东西,它是完全合理的。
IComparer<T>
是一种自定义比较 - 例如,通过比较名称来设置StudentNameComparer
来实现IComparer<Student>
是有意义的。
答案 1 :(得分:2)
IComparable
是interface,这意味着它定义了必须在继承类中实现的方法。它只是你对你的对象实现“比较”意味着什么。
答案 2 :(得分:0)
CompareTo
定义您的基础学生是否“大于”,“小于”或“等于”您的studentToCompare
,并且您可以根据自己的任何条件定义这些。
当你不写CompareTo
时出现错误的原因是因为如果你没有写IComparable
,那么你的班级实际上不会实现{{1}}