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