gpt4 book ai didi

C# 收集两点不返回任何结果

转载 作者:太空宇宙 更新时间:2023-11-03 17:14:28 24 4
gpt4 key购买 nike

类:

public class Point : IEqualityComparer<Point>
{
public char HorizontalPosition { get; set; }
public int VerticalPosition { get; set; }

public Point(char horizontalPosition, int verticalPosition)
{
HorizontalPosition = char.ToUpper(horizontalPosition);
VerticalPosition = verticalPosition;
}

public bool Equals(Point x, Point y)
{
return (x.VerticalPosition == y.VerticalPosition && x.HorizontalPosition == y.HorizontalPosition);
}

public int GetHashCode(Point obj)
{
return (obj.HorizontalPosition.GetHashCode() + obj.VerticalPosition.GetHashCode());
}
}

我试图在两个集合中找到公共(public)点(交点),但结果是空集合——其中应该有两个元素。为什么?我已经实现了 IEqualityComparer。我做错了什么吗?

示例集合:

  List<Point> first = new List<Point> { new Point('a', 1), new Point('b', 2) };
List<Point> second = new List<Point> { new Point('a', 1), new Point('b', 2) };
List<Point> intersection = first.Intersect(second).ToList();

交集是一个空列表,但其中应该有两个元素。

最佳答案

IEqualityComparer 是一个接口(interface),您可以为 Intersect 方法提供比较项目的接口(interface)。默认情况下不使用它来比较任何东西。因此,您的代码只是在 Object 中使用内置的 Equals,除非对象是同一对象,否则它将返回 false。

您必须覆盖类中默认的 EqualGetHashCode 方法,或者告诉交集使用您的比较器实现。但是您不应该在数据存储类中实现比较器。

关于C# 收集两点不返回任何结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39875425/

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