2013-07-03 2 views
0

Итак, у меня есть List<string[][]> myList для хранения сложного набора строк. Каждый раз, когда требуется новая ветка, мне нужно добавить все элементы списка в себя.Что делает List.Add (List [index]) создает новый объект или ссылку?

Так это то, что я делаю прямо сейчас

for (int k = 0; k < (count); k++) 
{ 
    myList.Add(myList[k]); 
} 

Но когда я изменить один из элементов списка, делая List[index].SetValue(value, index) всех элементов списка в списке в этом индексе переоденется!

Любая идея, почему? Я предполагаю, что это потому, что myList.Add(myList[k]) создает ссылку, поэтому в основном, как мне создать ее как новый объект?

+1

В зависимости от типа myList. – CodeCaster

+0

К сожалению, myList - это простой 'Список ' – rtindru

+1

Добавьте клон объекта вместо ссылки на список. – nakiya

ответ

0

Так вот что я в конечном итоге делаю ... Просьба предложить лучший метод, если вы его знаете.

for (int k = 0; k < (count); k++) 
{ 
    myList.Add((string[][])myList[k].Clone()); 
} 

Есть ли другой способ сделать это? Без необходимости перебирать каждый член списка?

+1

«Clone» делает слишком мелкую копию для 2D-массива. Вам нужно написать собственный метод клонирования, который создает новый массив и копирует отдельные строки. Или клонирует каждый 1D-массив во втором измерении. Или используйте 1D-массив для начала. – RalphChapin