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个点的位置的函数时,它成功了

List< List< Vector3>比;全是副本

您应该创建一个新实例,而不是在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创建一个新对象

相关文章: