大家好,我不知道为什么它不工作,需要一些帮助。我有一个包含链接和一些数据的列表我想通过链接主机来区分列表这里的代码
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();
之后什么也没发生。
您实现DataContainerEqualityComparer
的问题是您正在返回Url的哈希码,而不是主机的哈希码。
把它改成这样,它应该会像预期的那样工作:
public int GetHashCode(DataContainer obj)
{
return obj.Url.Host.GetHashCode();
}
当检查两个对象是否相等时,会发生以下情况:
首先,在两个对象上调用GetHashCode
。如果哈希码不同,则认为对象不相等,并且Equals
是,从不调用。
只有当GetHashCode
对两个对象返回相同的值时,才调用Equals
。