大家都知道为什么不工作需要一些帮助。我有一个列表,其中包含链接和一些数据,我想通过链接主机列出这里的代码
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提前。
答案 0 :(得分:13)
您实施DataContainerEqualityComparer
的问题是您要返回Url的哈希码而不是主机的哈希码。
将其更改为此,它应该按预期工作:
public int GetHashCode(DataContainer obj)
{
return obj.Url.Host.GetHashCode();
}
当检查两个对象是否相等时,会发生以下情况:
首先,在两个对象上调用GetHashCode
。如果哈希码不同,则认为对象不相等,Equals
从不被称为。
仅当Equals
为两个对象返回相同的值时,才会调用GetHashCode
。