2016-02-25 1 views
0

У меня есть коллекция из двух списков.Почему изменение в одном списке влияет на другой список?

List<list<int>> FS = new List<List<int>>();List<List<int> V= new List<List<int>>()

я добавил некоторые valuse к FS

Теперь мой FS Look Like

FS={{1},{2},{3}} 

Тогда я назначен Valus из FS в VV = FS Теперь я хочу, чтобы пройти через каждую пару

//Performing some Logic 
for (int i = 0; i < FS.Count-1; i++) 
     { 
      for (int k = i + 1; k < FS.Count; k++) 
      { 
       List<int> temp = new List<int>(); 
       temp.AddRange(FS[i]); 
       temp.AddRange(FS[k]); 
       VF.Add(IP_CFFM(temp)); 
       V.Add(temp); 
       if (IP_CFFM(temp) > IP_CFFM(FS[i]) && IP_CFFM(temp) > IP_CFFM(FS[k])) 
       { 
        FS[i].AddRange(FS[k]); 
        FS.Remove(FS[k]); 

       } 
      } 
     } 

Перед выполнением if(condition)V будет выглядеть V = {{1},{2},{3},{1,2}} Но после выполнения строки FS[i].AddRange(FS[k]); Список V изменяется, и это выглядит {{1,2},{2},{3},{1,2}} В if(condition), я не манипуляция или не выполнять ничего на V. Тогда почему это происходит?

+0

класса всегда ссылочный типа, пожалуйста, перейдите по [этому документу] (https://msdn.microsoft.com/en-us/library/490f96s2. aspx) –

ответ

1

List<T> - класс, поэтому ссылка.

V = FS Фактически это означает, что оба указывающие на то же местоположение/адресное пространство.

Это означает, что все, что вы делаете с ним, будет отражено в другом. Это просто, что два разных имен для вашего List

+0

Так как я могу избежать этого? Мой желаемый выход, выполняющий первый цикл if, {{1}, {2}, {3}, {1,2}} @Hari Prasad – Ritz

+0

Вместо V = FS я попробовал foreach (список Fi в FS) { V.Add (Fi); } но и тот же эффект @Hari Prasad – Ritz

+0

Я некоторое время отсутствовал, вы можете использовать 'V = FS.ToList();' он создает новый список с данными FS. –