簡體   English   中英

EqualityComparer <Type> GetHashCode和等於

[英]EqualityComparer<Type> GetHashCode and Equals

我有一個帶有自定義比較器的類型字典(字典),因為我們要存儲2個給定類型之間的關系(用於MVVM模式),並且我需要幫助以尋求使自定義EqualityComparer正常工作的方法。

做一些研究后,我發現GetHashCode方法在Equals方法之前被調用,如何正確獲得哈希碼?預期的行為是,如果我嘗試從字典中獲取“ Square”,並且它具有“ GeometricShape”已經存在,它返回“ GeometricShape”的值,我找不到以給定預期結果的方式對其進行哈希處理的方法

public class DictionaryComparer : EqualityComparer<Type>
{
    public override bool Equals(Type x, Type y)
    {            
        return x.IsAssignableFromType(y);
    }

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

您不能使用將“ assignable from”用作等效操作的比較器。

Equals具有由依賴它的類假定的特定規則。 如果違反規則,使用這種比較器的結果本質上將是隨機混洗。

請參閱重載等於准則()

x.Equals(x)返回true。
x.Equals(y)返回與y.Equals(x)相同的值
如果(x.Equals(y) && y.Equals(z))返回true,則x.Equals(z)返回true。

我不太確定如何解決您的特殊情況,也許如果您只需要將一種類型映射到另一種類型,則只需使用Dictionary<Type,Type>並將類型直接放入其中即可。

暫無
暫無

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

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