【问题标题】:Why change in one list affect other list?为什么一个列表中的更改会影响另一个列表?
【发布时间】:2016-02-25 05:26:49
【问题描述】:

我有两个 List 集合。

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

我给FS添加了一些有价值的东西

现在我的FS 看起来像

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

然后我将FS 的值分配给V V = 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 上进行任何操作或执行任何操作。那为什么会这样呢?

【问题讨论】:

标签: c# list c#-4.0 ienumerable


【解决方案1】:

List&lt;T&gt; 是一个类,所以是引用。

V = FS 实际上意味着两者都指向相同的位置/地址空间。

这意味着你对它所做的任何事情都会反映在另一个上。只是您的List

的两个不同名称

【讨论】:

  • 那么我该如何避免呢?我希望执行第一个 if 循环的输出是 { {1},{2},{3},{1,2} } @Hari Prasad
  • 我尝试了 foreach (List Fi in FS) { V.Add(Fi); 而不是 V= FS } 但也有同样的效果@Hari Prasad
  • 我出去了一段时间,你实际上可以使用V= FS.ToList(); 它使用FS的数据创建新列表。
  • 我无法访问 FS.Dump();这是什么意思? @Hari Prasad
  • 这是一个转储对象数据的Extension,我们在一般编码中使用它,而是可以循环收集和打印数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-02
  • 2017-01-14
  • 1970-01-01
  • 2015-06-29
相关资源
最近更新 更多