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类中对名称进行排序?
我正在使用IComparable和IComparer
这就是混淆的来源。你只需要两个中的一个,而且它们很少在同一个类中实现。
实现 IComparable<T>
是为了在一个对象和另一个对象之间进行自然的比较。在Student
的情况下,这可能没有意义,因为有多种方法来比较学生。另一方面,对于像DateTime
这样的东西,这是完全有意义的。
IComparer<T>
意味着是一个自定义比较-所以有一个StudentNameComparer
实现IComparer<Student>
通过比较名称是有意义的,例如。
IComparable
是一个接口,这意味着它定义了必须在继承类中实现的方法。这只是你对"Compare"对你的对象的意义的实现。
CompareTo
定义了你的基本学生是"大于"、"小于"还是"等于"你的studentToCompare
,你可以用任何你喜欢的标准来定义这些。
更多信息可在MSDN文档站点
找到当你不写CompareTo
时你得到错误的原因是因为如果你没有一个,你的类实际上不会实现IComparable