[英]What does CompareTo() do? 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);
}
使用Compare(學生x,學生y),我按姓名對學生列表進行排序。
如果我在Student類中不使用CompareTo(),則會出錯。
我想知道為什么我的主(學生)類中需要有一個CompareTo(),它有什么作用? 為什么我需要首先比較Student類中的學生編號,然后才允許對StudentCompareName類中的姓名進行排序?
我正在使用IComparable和IComparer
這就是混亂的根源。 你只需要兩個中的一個 -他們很少會在同一個類中實現。
IComparable<T>
以便在一個對象和另一個對象之間進行自然比較。 在像Student
這樣的情況下,這可能沒有任何意義,因為有多種方法可以比較學生。 另一方面,對於類似DateTime
東西來說,這是很有意義的。
IComparer<T>
是一個自定義比較-因此,有一個StudentNameComparer
有意義,例如,通過比較名稱來實現IComparer<Student>
。
IComparable
是一個接口 ,表示它定義了必須在繼承類中實現的方法。 這只是您對“比較”對您的對象的含義的實現。
CompareTo
定義您的基礎學生是“大於”,“小於”還是“等於” studentToCompare
,您可以根據自己的要求定義它們。
有關更多信息,請參見MSDN文檔站點。
不編寫CompareTo
時出現錯誤的原因是,如果沒有,則您的類實際上不會實現IComparable
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.