我编写了一个逐行读取文件的函数,计算位置向量并将这些向量添加到列表中。
这些bin/idea.vmoptions
中的每一个都会添加到List<Vector3> positionPerFrame
虽然forEach循环List<List<Vector3>> _frame
的每个循环中的每个positionPerFrame
都不同,但只包括添加的最后_frames
的重复项,基本上会覆盖以前添加的条目。
positionPerFrame
现在,当我打印List<string> frameData = new List<string> ();
frameData.AddRange (rawDataFile.text.Split ("\n" [0]));
_frames.Capacity = frameData.Count;
foreach (string str in frameData) {
positionPerFrame.Clear ();
//previous code with calculations omitted
positionPerFrame.Add (Vector3); // 15 times with 15 diff. vectors
_frames.Add(positionPerFrame);
}
时,它只是添加的最后_frames
的400倍,但是,当我调用设置15点位置的函数时,它的工作原理。
答案 0 :(得分:4)
您应该创建一个新实例,而不是在Vector3
变量中清除和添加相同的实例,因为您现在一遍又一遍地重复使用同一个对象。您的foreach (string str in frameData) {
positionPerFrame = new List<Vector3>();
positionPerFrame.Add (Vector3);
_frames.Add(positionPerFrame);
}
变量也可能是这样。
</english>
答案 1 :(得分:1)
那是因为你添加了一个引用。 在foreach内部做
positionPerFrame = new List<Vector3>();
答案 2 :(得分:1)
我无法看到您创建positionPerFrame的方式和位置,但怀疑以下内容: 您创建一次positionPerFrame并在循环中重复使用它。 然而,
_frames.Add(positionPerFrame);
不会将内容positionPerFrame复制到_frames,而是在_frames中存储对positionPerFrame的引用。 您每次都在循环中执行此操作,从而填充_frames并对同一个positionPerFrame对象进行多次引用。 同时,您在循环中更改positionPerFrame。由于_frames的所有元素都指向相同的positionPerFrame对象,因此您似乎正在更改_frames的所有内容。
解决方案:在循环中为positionPerFrame创建一个新对象。