簡體   English   中英

將字典 <TKey, TValue> 使用TKey.Equals和TKey.GetHashCode?

[英]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.Equalsobject.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM