Dot-Net

List<T> 排序使用的是 Comparer<T> 而不是 IEquatable,為什麼?

  • May 26, 2011

我寫了一大堆對象,它們都是集合的一部分,我需要對它們進行大量的排序和搜尋。在大多數這些對像上,我已經實現並覆蓋了Equals方法,IEquatableandoperator!operator==.

現在我想List&lt;T&gt;.Sort在一個已經實現了以上所有的對像上使用它,結果我需要實現IComparable來進行自定義排序。

為什麼 Sort 使用IComparable,那麼IEquatable在我的所有對像中都有什麼意義?

還有,Object.Equal壓倒一切與這一切有什麼關係?

它不可能IEquatable&lt;T&gt;用於排序——知道兩件事是否相等並不能幫助你對它們進行排名。但是,IComparable&lt;T&gt;如果您的類型實現它,或者任何IComparer&lt;T&gt;(包括Comparer&lt;T&gt;.Default)提供自定義比較器對象,它可以使用。函式式風格 ( Comparison&lt;T&gt;) 也很方便,無需大量程式碼即可進行臨時排序:

list.Sort((x,y) =&gt; string.Compare(x.Name, y.Name));

但是,如果您只想要一個簡單的序數排序,請使用您的T工具IComparable&lt;T&gt;,然後使用:

list.Sort();

引用自:https://stackoverflow.com/questions/6138596