List< List< Vector3>比;全是副本
本文关键字:List 副本 lt Vector3 | 更新日期: 2023-09-27 18:18:03
我写了一个函数,逐行读取文件,计算位置向量,并将这些向量添加到列表中。然后将每个List<Vector3> positionPerFrame
加到List<List<Vector3>> _frame
每个positionPerFrame
在forEach循环的每个循环中都是不同的,_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
时,它只是上次添加的positionPerFrame
的400倍,然而,当我调用设置15个点的位置的函数时,它成功了
您应该创建一个新实例,而不是在positionPerFrame
变量中清除和添加相同的实例,因为您现在一遍又一遍地重用相同的对象。对于您的Vector3
变量,这可能也是正确的。
foreach (string str in frameData) {
positionPerFrame = new List<Vector3>();
positionPerFrame.Add (Vector3);
_frames.Add(positionPerFrame);
}
这是因为您添加了一个引用。Inside foreach do
positionPerFrame = new List<Vector3>();
我不知道如何以及在哪里创建positionPerFrame,但怀疑以下内容:您创建一次positionPerFrame并在循环中重用它。然而,
_frames.Add(positionPerFrame);
不会将内容positionPerFrame复制到_frames中,而是在_frames中存储对positionPerFrame的引用。在循环中每次都这样做,从而用对同一个positionPerFrame对象的多个引用填充_frames。同时,在循环中修改positionPerFrame。因为_frames的所有元素都指向同一个positionPerFrame对象,看起来好像你在改变_frames的所有内容。
解决方案:在循环中为positionPerFrame创建一个新对象