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

get unique values from a list op points in c# error

我有一个简单的class点

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]);

            }
        }

但是我得到了一个“超出索引”的异常..这是怎么回事?

如果你想通过 xy 比较一个点,你应该覆盖 EqualsGetHashCode

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;
   }
}

我取哈希码函数here.

现在您可以通过使用

获得独特点的列表
var dim0 = (new HashSet(dim)).ToList();

// linq
var dim0 = dim.Distinct().ToList(); 

或者如果你想使用 for 循环

var dim0 = new List<Point>();
foreach(var p in dim){
    if(!dim0.Contains(p)){
        dim0.Add(p);
    }
}

您的解决方案无效,因为 dim0 最初没有任何意义。