【问题标题】:A list of references gets affected when another list is cleared当另一个列表被清除时,参考列表会受到影响
【发布时间】:2018-12-22 21:40:22
【问题描述】:

我创建了一个列表为PartList,一个名为CombinePartList"的方法创建并返回它。在另一个方法中我需要这个方法的结果,但我还需要清除列表PartList。所以我创建了另一个清单, 但是当我清除PartList 时,名为MPartList 的第二个也被清除了。 我的问题是,为什么会发生这种情况,我该如何解决?

这是我的代码:

List<ModifiedPartList> PartList = new List<ModifiedPartList>();
List<ModifiedPartList> MpartList= new List<ModifiedPartList>();;
anotherMethode()
{

MpartList = CombinePartListforView(bar, ViewNum);
*
*
*            
PartList.Clear();
}

【问题讨论】:

  • 在某些时候,您可能正在使用MpartList = PartList。不过,您似乎在这里省略了代码。

标签: c# list reference


【解决方案1】:

您的 sn-p 并不能准确说明问题所在,但我假设 CombinePartListforView() 返回对 PartList 的引用,因此使 MpartList 指向与 PartList 相同的实例。您可能不想更改列表实例本身,只更改内容。

试试

MpartList = new List<ModifiedPartList>(CombinePartListforView(bar, ViewNum));

或确保在该方法中返回一个新实例。

【讨论】:

    【解决方案2】:

    MpartList 引用了PartList。因此,当您清除其中一个时,另一个将被清除。 (两者引用相同的值

    作为一种解决方案,我建议您通过使用 for 循环并像这样创建新对象来完全复制 PartList:

    Public List<ModifiedPartList> FullCopy(List<ModifiedPartList> PartList)
    {
    List<ModifiedPartList> NewList=new List<ModifiedPartList>();
    for (int i=0;i<PartList.Count();i++)
    {
        NewList.Add(CopyObject(PartList[i]));//Write this function
    }
    return NewList();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-10
      • 2023-03-23
      相关资源
      最近更新 更多