2016-11-15 3 views
1

Я написал функцию, которая читает файл строки за строкой, вычисляет позиционные элементы и добавляет эти векторы в список. Каждый из этих 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

не означал, размытый. – coernel

1

Это потому, что вы добавляете ссылку. внутри Еогеасп сделать

positionPerFrame = new List<Vector3>(); 
1

Я не вижу, как и где вы создаете positionPerFrame, но подозреваю следующее: Вы создаете positionPerFrame раз и повторно использовать его в цикле. Однако

_frames.Add(positionPerFrame); 

не копирует содержимое positionPerFrame в _frames но сохраняет ссылку на positionPerFrame в _frames. Вы делаете это каждый раз в своем цикле, тем самым заполняя _frames несколькими ссылками на один и тот же объект positionPerFrame. В то же время вы изменяете positionPerFrame в цикле. Поскольку все элементы _frames указывают на один и тот же объект positionPerFrame, кажется, что вы меняете все содержимое _frames.

Решение: создайте новый объект для positionPerFrame в вашей петле.

+0

Большое спасибо – coernel

Смежные вопросы