為什麼我們需要 IEqualityComparer,IEqualityComparer<T> 介面?
‘Equal’ 和 ‘GetHashcode’ 方法存在於對像類中,我們的類型繼承了對象基類。直接實現對象的兩種方法和使用 IComparer 介面有什麼區別?
如果我們覆蓋對象的 Equal 和 GetHashCode ,並推送到一個 hashtable ,它會使用覆蓋的 equal 方法嗎?
帶有 IEqualityComparer 建構子的新雜湊表有什麼不同?
IComparable當您需要能夠“排序”對象時使用該介面,它為您提供了一個方法 (CompareTo),告訴您兩個對像是 <、= 還是 >。使用的建構子可以IEqualityComparer讓你給出一個特定的Equals/GetHashCode,它可以與你的對象定義的不同。通常,Hashtable將使用您的對象覆蓋Equals和GetHashCode(或基礎objectEquals和GetHashCode)。舉個例子,標準字元串以區分大小寫的方式(
"A"!="a")進行比較,但您可以創建一個IEqualityComparer幫助類,以便能夠以不區分大小寫的方式散列您的字元串。(從技術上講,這個類已經存在於多個變體中:它們被呼叫StringComparer.InvariantCultureIgnoreCase並且所有其他靜態方法都StringComparer返回一個StringComparer實現IComparer,IEqualityComparer,IComparer<string>,的對象IEqualityComparer<string>)請注意,
Hashtable使用IEqualityComparer可選參數,而不是通用版本IEqualityComparer<T>,因為Hashtable是前泛型。