2

大家好,我不知道为什么它不工作需要一些帮助。我有一个包含链接和一些数据的列表,我想按链接主机在此处区分列表代码

    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();

在此之后没有任何反应。提前谢谢。

4

1 回答 1

17

您实现的问题DataContainerEqualityComparer是您返回的是 URL 的哈希码,而不是主机的哈希码。

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

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

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

首先,GetHashCode在两个对象上调用。如果哈希码不同,则对象被认为不相等并且Equals永远不会被调用
Equals仅在GetHashCode为两个对象返回相同值时调用。

于 2013-01-15T16:01:37.263 回答