不同的IEqualityComparer<>问题

时间:2013-01-15 15:57:49

标签: c# linq

大家都知道为什么不工作需要一些帮助。我有一个列表,其中包含链接和一些数据,我想通过链接主机列出这里的代码

    public class DataContainerEqualityComparer : IEqualityComparer<DataContainer>
        {
            public bool Equals(DataContainer x, DataContainer y)
            {
                return x.Url.Host == y.Url.Host;
            }

            public int GetHashCode(DataContainer obj)
            {
                return obj.Url.GetHashCode();
            }
        }

List<DataContainer> items = new List<DataContainer>();
var item = new DataContainer("http://google.com/123");
items.Add(item);
item = new DataContainer("http://google.com/1234");
items.Add(item);
item = new DataContainer("http://google.com/12345");
items.Add(item);
item = new DataContainer("http://google.com/123456");
items.Add(item);
item = new DataContainer("http://google.com/1234567");
items.Add(item);                
items = items.Distinct(new DataContainerEqualityComparer()).ToList();

之后没有任何反应。 Thx提前。

1 个答案:

答案 0 :(得分:13)

您实施DataContainerEqualityComparer的问题是您要返回Url的哈希码而不是主机的哈希码。

将其更改为此,它应该按预期工作:

public int GetHashCode(DataContainer obj)
{
    return obj.Url.Host.GetHashCode();
}

当检查两个对象是否相等时,会发生以下情况:

首先,在两个对象上调用GetHashCode。如果哈希码不同,则认为对象不相等,Equals 从不被称为
仅当Equals为两个对象返回相同的值时,才会调用GetHashCode