在c#中比较两个复杂对象列表的最佳方法是什么

时间:2016-01-12 17:28:22

标签: c# list dictionary compare points

朋友们,我想创建一个获取两个点列表(我创建的对象)并返回包含以下内容的列表的方法:

  1. 第一个和第二个列表中存在的点。

  2. 第一个列表中存在的点,但第二个列表中不存在。

  3. 第一个中不存在的点,并存在于第二个列表中。

  4. 最好的观察者是什么?

    Point.cs:

    Public class Point {public int X; public int Y}
    

2 个答案:

答案 0 :(得分:2)

首先,您需要创建IEqualityComparer<Point>。然后使用IntersectExcept Linq方法来实现您的目标。

  1. var result = points1.Intersect(points2,yourComparer);
  2. var result = points1.Except(points2,yourComparer);
  3. var result = points2.Except(points1,yourComparer);
  4. 其中points1和points2是你的积分列表。

    要实现IEqualityComparer,refer this question作为开始。

答案 1 :(得分:0)

你可以做多件事。

首先使用System.Drawing.Point结构代替您自己的类,您也可以进行比较。

其次,如果您必须创建自己的类,请覆盖班级中的EqualsGetHashCode