从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