从其他列表中删除一个列表的元素

Ped*_*sso 0 .net c# linq list

我有一个积分列表.我正在申请:

var result = neighbors.SelectMany(element => GenerateNeighbors(element)).Distinct<Point3D>().ToList<Point3D>();
Run Code Online (Sandbox Code Playgroud)

从该列表的每个点生成所有邻居.但我有另一个列表与其他点,这个邻居生成可以生成已经添加到那个点.

如何从结果列表中删除其他列表中的重复元素?任何带有一些谓词的linq函数我可以用来改进它吗?

非常感谢!

编辑 新代码:

    class Point3D : IEquatable<Point3D>
    {
        public int X { get; set; }
        public int Y { get; set; }
        public int Z { get; set; }
        public bool visited { get; set; }
        public int life { get; set; }

        public Point3D(int _x, int _y, int _z)
        {
            this.X = _x;
            this.Y = _y;
            this.Z = _z;
            this.visited = false;
            this.life = 2;
        }

        public int GetHashCode(Point3D obj)
        {
            throw new NotImplementedException();
        }

        public override Boolean Equals(object o)
        {
            if (!(o is Point3D)) return false;
            return Equals((Point3D)o);
        }

        public Boolean Equals(Point3D p)
        {
            return Equals(this, p);
        }

        public static Boolean Equals(Point3D a, Point3D b)
        {
            return a.X == b.X && a.Y == b.Y && a.Z == b.Z;
        }
    }
Run Code Online (Sandbox Code Playgroud)

Bro*_*ass 5

您可以使用Linq Except()扩展方法:

result = result.Except(otherList).ToList();
Run Code Online (Sandbox Code Playgroud)

你的Point3D类应该提供Equals/ 的适当实现GetHashCode(是的,你必须实现它,抛出一个NotImplementedException将无法工作)或实现(更明确)IEquatable<Point3D>使其工作,或者你可以将自定义IEqualityComparer作为第二个参数传递给Except()