List<List<List<PointF>>> myList = new List<List<List<PointF>>>();
List<List<PointF>> subList = new List<List<PointF>>();
List<PointF> subSubList = new List<PointF>();
for(int x = 0; x<5; x++)
{
for(int y = 0; y<15; y++)
{
for(int z = 0; z<15; z++)
{
subSubList.Add(new PointF(0, 0));
}
subList.Add(subSubList);
}
myList.Add(subList);
}
PointF first = new PointF(12, 12);
PointF second = new PointF(25, 14);
PointF third = new PointF(4, 44);
myList[0][8][10] = first;
myList[1][8][10] = second;
myList[2][8][10] = third;
当我调试每一行时,first
被正确分配给myList[0][8][10]
但是一旦它转到下一行,myList[0][8][10]
的值就会更改为PointF(25, 14)
。
到执行结束时,myList[0][8][10]
、myList[1][8][10]
、myList[2][8][10]
处的值都PointF(4, 44)
。
我做错了什么?
在你的代码中,myList
、subList
和subSubList
只分配一次:
List<List<List<PointF>>> myList = new List<List<List<PointF>>>();
List<List<PointF>> subList = new List<List<PointF>>();
List<PointF> subSubList = new List<PointF>();
因此,这些变量在其他任何地方都引用相同的实例。因此,当您插入它时:
subList.Add(subSubList);
...
myList.Add(subList);
在同一对象中多次插入相同的引用。
它:
myList[0] == myList[1] == .. myList[4] == subList
.myList[_][0] == myList[_][1] == .. myList[_][14] == subSubList
无论_
是什么。
这就是为什么myList[a][b]
、myList[c][d]
和subSubList
都是对同一个对象的引用,无论a
、b
、c
和d
是什么。所以当你写myList[2][8][10] = third;
它和写subSubList[10] == third;
一样,阅读myList[a][b][10]
和阅读subSubList[10]
是一样的。
要使其正常工作,您应该在插入后实例化新对象:
subList.Add(subSubList);
subSubList = new List<PointF>();
和
myList.Add(subList);
subList = new List<List<PointF>>();