Dot-Net

為什麼我們需要 IEqualityComparer,IEqualityComparer<T> 介面?

  • November 1, 2011

‘Equal’ 和 ‘GetHashcode’ 方法存在於對像類中,我們的類型繼承了對象基類。直接實現對象的兩種方法和使用 IComparer 介面有什麼區別?

如果我們覆蓋對象的 Equal 和 GetHashCode ,並推送到一個 hashtable ,它會使用覆蓋的 equal 方法嗎?

帶有 IEqualityComparer 建構子的新雜湊表有什麼不同?

IComparable當您需要能夠“排序”對象時使用該介面,它為您提供了一個方法 ( CompareTo),告訴您兩個對像是 <、= 還是 >。使用的建構子可以IEqualityComparer讓你給出一個特定的Equals/ GetHashCode,它可以與你的對象定義的不同。通常,Hashtable將使用您的對象覆蓋EqualsGetHashCode(或基礎object EqualsGetHashCode)。

舉個例子,標準字元串以區分大小寫的方式("A"!= "a")進行比較,但您可以創建一個IEqualityComparer幫助類,以便能夠以不區分大小寫的方式散列您的字元串。(從技術上講,這個類已經存在於多個變體中:它們被呼叫StringComparer.InvariantCultureIgnoreCase並且所有其他靜態方法都StringComparer返回一個StringComparer實現IComparer, IEqualityComparer, IComparer&lt;string&gt;,的對象IEqualityComparer&lt;string&gt;

請注意,Hashtable使用IEqualityComparer可選參數,而不是通用版本IEqualityComparer&lt;T&gt;,因為Hashtable是前泛型。

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