C# CompareTo()做什么?不可比
我正在使用IComparable和IComparer 在学生课堂上:[i可比较]C# CompareTo()做什么?不可比,c#,icomparable,C#,Icomparable,我正在使用IComparable和IComparer 在学生课堂上:[i可比较] public int CompareTo(Student studentToCompare) { if (this.Number < studentToCompare.Number) return 1; else if (this.Number > studentToCompare.Number) retur
public int CompareTo(Student studentToCompare)
{
if (this.Number < studentToCompare.Number)
return 1;
else if (this.Number > studentToCompare.Number)
return -1;
else
return 0;
}
public int Compare(Student x, Student y)
{
return string.Compare(x.Name, y.Name);
}
通过比较(学生x,学生y),我将学生名单按姓名进行排序
如果我在学生课堂上不使用CompareTo(),我就会出错
我想知道为什么我的主课(学生课)上需要一个CompareTo(),它做什么?为什么我需要首先比较student类中的学生编号,然后才允许在StudentCompareName类中按名称排序?
IComparable
是一个,这意味着它定义了必须在继承类中实现的方法。它只是您对对象的“比较”含义的实现。IComparable
是一个,这意味着它定义了必须在继承类中实现的方法。这只是你对“比较”对你的对象意味着什么的实现
我正在使用IComparable和IComparer
这就是混乱的根源。您只需要其中一个,而且它们很少在同一个类中实现
IComparable
用于在一个对象和另一个对象之间进行自然比较。对于像Student
这样的情况,这可能没有意义,因为有多种方法可以比较学生。另一方面,对于像DateTime
这样的东西来说,它非常有意义
IComparer
是一种自定义比较,因此有一个StudentNameComparer
是有意义的,它通过比较名称来实现IComparer
我正在使用IComparable和IComparer
这就是混乱的根源。您只需要其中一个,而且它们很少在同一个类中实现
IComparable
用于在一个对象和另一个对象之间进行自然比较。对于像Student
这样的情况,这可能没有意义,因为有多种方法可以比较学生。另一方面,对于像DateTime
这样的东西来说,它非常有意义
IComparer
是一种自定义比较-因此有一个StudentNameComparer
是有意义的,它通过比较名称来实现IComparer
。CompareTo
定义基础学生是“大于”、“小于”还是“等于”你的studentToCompare
,你可以用任何你喜欢的标准来定义它们
有关更多信息,请访问
当您没有编写
比较器时出错的原因是,如果您没有比较器,您的类实际上不会实现IComparable
比较器
定义基础学生是“大于”、“小于”还是“等于”您的学生比较器
,你可以用任何你喜欢的标准来定义它们
有关更多信息,请访问
当您没有编写比较器时出错的原因是,如果您没有比较器,您的类实际上不会实现IComparable
您能更彻底地定义“我出错了”吗?您能定义“我出错了”吗更彻底一点?这样说有意义吗:IComparable
可用于将一个实例与另一个实例进行比较,而用于自定义比较的icomparaer
可用于将两个实例进行比较的StudentNameComparier
。这样可以吗?@DarthVader:No-StudentNameComparer
不会使用IComparer
,而是IComparer
。它将被类似于排序的东西使用。这就是我的意思,明白了。同时,你可以这样建议:我使用了一个IComparer并创建了它的一个实例。StudentNameComparer snc=新建StudentNameComparer()。在那之后,我列出了students.Sort(snc)。那好吗?@xVizzi:是的,那很好。说:IComparable
可以用来比较一个实例和另一个实例,而用于自定义比较的icomparaer
可以用在一个StudentNameComparer
中,它接受两个实例并比较它们。这样可以吗?@DarthVader:No-StudentNameComparer
不会使用IComparer
,而是IComparer
。它将被类似于排序的东西使用。这就是我的意思,明白了。同时,你可以这样建议:我使用了一个IComparer并创建了它的一个实例。StudentNameComparer snc=新建StudentNameComparer()。在那之后,我列出了students.Sort(snc)。那好吗?是的,很好。