Dot-Net
List<T> 排序使用的是 Comparer<T> 而不是 IEquatable,為什麼?
我寫了一大堆對象,它們都是集合的一部分,我需要對它們進行大量的排序和搜尋。在大多數這些對像上,我已經實現並覆蓋了
Equals方法,IEquatableandoperator!和operator==.現在我想
List<T>.Sort在一個已經實現了以上所有的對像上使用它,結果我需要實現IComparable來進行自定義排序。為什麼 Sort 使用
IComparable,那麼IEquatable在我的所有對像中都有什麼意義?還有,
Object.Equal壓倒一切與這一切有什麼關係?
它不可能
IEquatable<T>用於排序——知道兩件事是否相等並不能幫助你對它們進行排名。但是,IComparable<T>如果您的類型實現它,或者任何IComparer<T>(包括Comparer<T>.Default)提供自定義比較器對象,它可以使用。函式式風格 (Comparison<T>) 也很方便,無需大量程式碼即可進行臨時排序:list.Sort((x,y) => string.Compare(x.Name, y.Name));但是,如果您只想要一個簡單的序數排序,請使用您的
T工具IComparable<T>,然後使用:list.Sort();