gpt4 book ai didi

c# - 不同的 IEqualityComparer<> 问题

转载 作者:行者123 更新时间:2023-11-30 18:59:07 25 4
gpt4 key购买 nike

大家好,我不明白为什么它不起作用需要一些帮助。我有一个包含链接的列表和一些数据,我想通过链接主机在代码中区分列表

    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 永远不会调用
Equals 仅在 GetHashCode 为两个对象返回相同值时调用。

关于c# - 不同的 IEqualityComparer<> 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14341619/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com