使用 Accord.net KD 树库。我有以下代码:
Accord.Collections.KDTree<Coordinate> tree = new Accord.Collections.KDTree<Coordinate>(3);
Coordinate point = new Coordinate(5, 5, 5);
double[] temp = { 5, 5, 5 };
tree.Add(temp, point);
temp = new double[] { 1,1,1 };
tree.Add(temp, point);
temp = new double[] { 6,6,6 };
tree.Add(temp, point);
var en = tree.GetEnumerator();
while (en.MoveNext())
{
en.Current.Value.PointStatus = 99;
}
}
树中有三个值 - 索引 0、1、2。当 while 循环在第一次迭代中的代码底部运行时,我期望只有当前(第一个)实体的值更改为 99。相反,所有三个实体都更改为 99。
C# 新手,仍在学习。这里可能发生什么。
这是GetEnumerator 上文档的链接。
编辑:当我使用相同的 temp 实例然后添加断点时,值显示为唯一:

如果我然后获取枚举器并使用以下代码:
Coordinate[] coords = new Coordinate[] { };
var en = tree.GetEnumerator();
while (en.MoveNext())
{
Console.WriteLine(en.Current.Value.X);
}
我得到:
5
5
5
在我看来,我实际上是在存储对数据的引用,并且数据是单个对象。现在的难题是编译器在断点处显示错误的值是什么?