В вашем коде 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>>();