[英]Will Dictionary<TKey, TValue> use TKey.Equals and TKey.GetHashCode?
我已經實現了如下字典:
Dictionary<ErrorHashKey, ErrorRow> dictionary;
我在ErrorHashKey
類中定義了Equals()
和GetHashCode()
。 我目前正在為該項目編寫一些文檔,並從IEqualityComparer接口文檔中獲取 :
Dictionary需要一個相等的實現來確定鍵是否相等。 您可以使用接受comparer參數的構造函數指定IEqualityComparer泛型接口的實現。 如果未指定實現,則使用默認的通用相等比較器EqualityComparer.Default。 如果類型TKey實現System.IEquatable泛型接口,則默認的相等比較器使用該實現。
我沒有做任何文件指定的事情(或者至少我認為不是)。 我沒有在構造函數參數中傳遞比較器,也沒有創建EqualityComparer.Default
比較器。
是否在創建的每個類中自動實現了System.IEquatable<T> generic interface
? 我應該定義IEqualityComparer<T>
嗎?
默認的比較將調用object.Equals
或object.GetHashCode
(你覆蓋的方法),如果IEquatable<T>
未實現。 這在EqualityComparer<T>.Default
文檔中有記錄 。 你不需要做任何額外的事情,不, IEquatable<T>
不會在你的類中自動實現。
您問題中的答案ID:
如果未指定實現,則使用默認的通用相等比較器EqualityComparer.Default
如果你沒有實現IEquatable,EqualityComparer.Default正在使用Equals
方法。
Default屬性檢查類型T是否實現System.IEquatable接口,如果是,則返回使用該實現的EqualityComparer。 否則,它返回一個EqualityComparer,它使用由T提供的Object.Equals和Object.GetHashCode的覆蓋。
來源: http : //msdn.microsoft.com/en-us/library/ms224763(v = vs.110).aspx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.