簡體   English   中英

用於輸入字典的自定義相等比較器

[英]Custom equality comparer for Type in dictionary

由於Int32是一個Object ,我希望它打印“True”

    Dictionary<Type, string> dict = new Dictionary<Type, string>(new MyComparer());
    dict[typeof(object)] = "Hello";

    Console.WriteLine(dict.ContainsKey(typeof(int))); // currently prints false :(

這是我嘗試過的比較器:

    public class MyComparer : IEqualityComparer<Type>
    {
        public bool Equals(Type x, Type y)
        {
            return y.IsAssignableFrom(x);
        }

        public int GetHashCode(Type obj)
        {
            return obj.GetHashCode();
        }
    }

但它不起作用。 我不太確定在GetHashCode返回什么 - 我知道調試時這是錯誤的原因我什至沒有達到Equals - 知道如何正確編寫它嗎? 謝謝。

這根本不是字典的有效比較器,結果也沒有明確定義。 相等比較應該是可交換的,特別a eq b當且僅當b eq a 這不適用於您的情況。 同樣,有效的哈希碼實現聲明:

  • 如果兩個散列不相等,則兩個值不相等
  • 兩個相等的值必須具有相同的哈希碼

那也失敗了。

基本上,這是行不通的。

具體來說,來自 MSDN

給實施者的注意事項

實現需要確保如果 Equals 方法對兩個對象 x 和 y 返回true ,則 GetHashCode 方法為 x 返回的值必須等於為 y 返回的值。

Equals 方法是自反的、對稱的和可傳遞的。 也就是說,如果用於將對象與自身進行比較,則返回true 兩個對象的x和y,如果它是用於y和x; 真正的兩個對象x和z如果是Y和Z x和y的真實,也是如此

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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