gpt4 book ai didi

c# - 列表之间不能进行相交

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

我有一个奇怪的问题。
我使用 Visual Studio,正在使用 C# 开发一个项目。
我有两个自定义类“Attr”和“FD”,我使用包含它们的对象的列表,例如

List<Attr> attrList = new List<Attr>();
List<FD> fdList = new List<FD>();

因此,当我尝试查找两个列表的交集时,结果不是我所期望的。为了使它更简单,我尝试相交相似的对象,结果再次错误。出了什么问题?

这是 fd。它是 FD 类的对象。 this is the fd
这就是 ff,它也是 FD 类的对象。 this is ff

正如您所看到的,这些对象包含完全相同的值。
方法 GetLeft() 返回一个包含 Attr 类对象的列表。

因此,当我尝试找到这两个列表(fd.GetLeft()ff.GetLeft() )之间的交集时,结果是什么(应该是)包含 Attr 对象“A”的列表)。 this is intersection

我错过了什么?

附注这些屏幕截图来自 Visual Studio 中的 Debug模式。

最佳答案

为了使用Intersect我建议实现IEqualityComparer<T> ,像这样:

public class FD
{
public string Name { get; set; }
}

static void Main()
{
List<FD> fdList1 = new List<FD>();
fdList1.Add(new FD { Name = "a" });

List<FD> fdList2 = new List<FD>();
fdList2.Add(new FD { Name = "a" });

IEnumerable<FD> fd = fdList1.Intersect<FD>(fdList2, new ComparerFd()).ToList();
}

还有CamparerFd应该是这样的:

public class ComparerFd : IEqualityComparer<FD>
{

public bool Equals(FD x, FD y)
{
return x.Name == y.Name;
}

public int GetHashCode(FD obj)
{
if(obj == null) return 0;

return obj.Name.GetHashCode();//Or whatever way to get hash code
}
}

关于c# - 列表之间不能进行相交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43114229/

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