2016-11-15 58 views
1

的我寫了一個函數,通過線讀取文件線,計算positionvectors並增加了這些矢量的列表。 每個List<Vector3> positionPerFrame的比加入到List<List<Vector3>> _frame列表<列表<Vector3>>滿重複

雖然每個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,它只是400次最後positionPerFrame補充說,然而,當我打電話,設置了15個點的位置的功能,它的工作原理。

回答

4

而是清算和增加在positionPerFrame變量相同的情況下,你應該創建一個新的實例,因爲你現在是一遍又一遍地重複使用同一個對象。您的Vector3變量也可能是這樣。

foreach (string str in frameData) { 
    positionPerFrame = new List<Vector3>(); 

    positionPerFrame.Add (Vector3); 
    _frames.Add(positionPerFrame); 
} 
+0

感謝,這是它:) – coernel

+0

didnt意味着,misclicked。 – coernel

1

那是因爲你添加了一個引用。 裏面的foreach做

positionPerFrame = new List<Vector3>(); 
1

我看不出哪裏如何創建positionPerFrame讓人懷疑如下: 你曾經創建positionPerFrame和在循環重複使用。 然而,

_frames.Add(positionPerFrame); 

不會複製內容到positionPerFrame但_frames存儲在_frames到positionPerFrame參考。 你做這每一次在你的循環,從而填補了相同的positionPerFrame對象的多個引用_frames。 同時,您在循環改變positionPerFrame。由於_frames的所有元素都指向相同的positionPerFrame對象,因此您似乎正在更改_frames的所有內容。

解決方案:在循環創建positionPerFrame一個新的對象。

+0

非常感謝 – coernel