从c#错误中的操作点列表中获取唯一值

从c#错误中的操作点列表中获取唯一值,c#,list,unique-values,C#,List,Unique Values,我有一个简单的课堂要点 public class point { private double X; private double Y; public double x { get { return X; } set { X = value; } } public double y { get { return Y; } set { Y = value; } }

我有一个简单的课堂要点

public class point
{
    private double X;
    private double Y;
    public double x
    {
        get { return X; }
        set { X = value; }
    }
    public double y
    {
        get { return Y; }
        set { Y = value; }
    }
    public point() { }
    public point(double _x , double _y)
    {
        x = _x;
        y = _y;
    }
}
我试图使用这个循环来获得唯一的值

        for (int i = 0; i < dim.Count; i++)
        {
            if (dimO[i].x == dim[i].x && dimO[i].y == dim[i].y)
            {
                continue;
            }
            else
            {
                dimO.Add(dim[i]);

            }
        }
for(int i=0;i

但我有一个“索引外”的例外。。这里出了什么问题?

如果要通过点的
x
y
来比较点,则应该覆盖
Equals
GetHashCode

public override bool Equals(object obj)
{
    var point2 = obj as Point;
    return point2 != null && point2.x == x && point2.y == y;
}

public override int GetHashCode()
{
   unchecked // Overflow is fine, just wrap
   {
       int hash = 17;
       // Suitable nullity checks etc, of course :)
       hash = hash * 23 + X.GetHashCode();
       hash = hash * 23 + Y.GetHashCode();
       return hash;
   }
}
我使用散列码函数

现在,您可以使用

var dim0 = (new HashSet(dim)).ToList();

// linq
var dim0 = dim.Distinct().ToList(); 
或者,如果您想对
循环使用

var dim0 = new List<Point>();
foreach(var p in dim){
    if(!dim0.Contains(p)){
        dim0.Add(p);
    }
}
var dim0=新列表();
foreach(在dim中的var p){
如果(!dim0.包含(p)){
添加(p);
}
}

您的解决方案不起作用,因为
dim0
最初没有任何点。

您的
dim
dim0
是什么?dim和dimO是点的列表。。我正在尝试将唯一点从dim复制到dimO