关于为什么会这样的任何想法
public Collection<Point> data = new Collection<Point>(){
new Point{X=10,Y=20},
new Point{X=20,Y=30},
new Point{X=40,Y=20},
new Point{X=10,Y=20}
};
(注意相同的第一个和最后一个元素) 给出错误
已添加具有相同 key 的项目。
如果您将最后一个元素更改为 Y=20.1 或任何使其不同的元素,那么它就可以工作。 您也可以随意添加元素并获得相同的结果。
问题显然是由于 Point 是一个值类型,因为如果你定义和使用一个 point 类,它就会消失,而且我知道在其他集合类型中使用结构存在问题,但这与值之间的差异有关和 ref 返回类型。令我感到困惑的是,如果所有结构都具有不同的字段值,这会起作用。
最佳答案
原因是因为值类型的相等性基于它的值 - 对于结构它在所有字段上都是相等的。
引用类型相等性基于引用本身,因此有效。将结构值更改为完全不同也有效。
如果你只是想要一个列表,只需使用 List<Point>
,我认为这将接受重复项。
更新:您的集合类似乎正在检测重复项,而您正在尝试添加重复项。如果你想添加重复项,我会说你不能使用这个类。
关于c# - 集合行为中的奇怪 C# 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3235802/