我有類似以下的內容是通用字典的關鍵。我的IEquatable仍在使用Object.GetHashcode用於字典<T> []
class IMyClass<T> : IEquatable<IMyClass> where T : struct
{
//etc
}
class MyClass<T> : IMyClass<T> where T : struct
{
public bool Equals(IRatingKey<T> other)
{
//etc
}
}
據我瞭解的EqualityComparer<T>.Default
,但應該看到,我已經實現IEquatable<T>
,因此動態創建的EqualityComparer。
Dictionary<TKey, TValue>
要求等式實現爲 確定密鑰是否相等。如果比較器爲空,則此構造函數使用默認的通用相等比較器EqualityComparer<T>.Default
。如果類型TKey
實現通用接口System.IEquatable<T>
,則默認的相等比較器 將使用該實現。
但是從我所看到的使用字典索引Dictionary<T>[]
的,它仍然依賴於壓倒一切的GetHashCode如public override int GetHashCode()
我可以看到,有建議重寫了很多的一致性,但我試圖更多地理解它。是因爲IEquatable應該直接在MyClass上而不是在IMyClass中?但我更喜歡IMyClass,所以實現者需要成爲一個字典密鑰。
我正在試驗IEqualityComparer,但從我的理解我不需要它。
因此使用索引器肯定會使用'GetHashCode()',這就是它生成原始哈希碼的方式。**用於確定在添加時將其放置在哪個存儲桶中的一個。 –
嘿,任何理由投票關閉或downvote?我想如果有人不確定字典是如何工作的,那麼SO是個好地方... –
真@MichaelPerrenoud,感謝您的反饋。我發現它需要GetHashCode(),它需要它是有意義的。但在文檔中尚不清楚,所以我想確保。 –