【问题标题】:Adding data in one list from another list saves reference of first list从另一个列表中添加一个列表中的数据可以保存第一个列表的引用
【发布时间】:2019-09-11 09:24:51
【问题描述】:

我有 2 个 observablecollection 类型列表,其中一个列表已经包含数据,而在第二个列表中,我正在从第一个列表中添加数据。但是当我打乱第二个列表中的数据时,它也会打乱第一个列表中的数据。

首先我尝试使用 foreach 循环手动添加数据

foreach(var dat in list1){        
    list2.add(new model(){
    name=dat.name
    });
} 

然后使用此方法复制数据。

list2 = new ObservableCollection<Model>(list1);

但对我没有任何作用

这是我目前正在使用的代码

list1 and 2 are property of 
ObservableCollection<Model> type

list2 = new ObservableCollection<Model>(list1);

在list2中打乱数据

var templist = list2.Select(c => c).ToList();
templist.Shuffler();
        int j = 0;
        for (int i = 0; i < 5; i++)
        {
            list2[i].name = templist[j].name;
            list2[i].Id = i + 1;
            j++;
        }

在这段代码之后,list1 中的数据也被打乱了。

我想要的是每当我洗牌数据时它不应该影响我的主列表中的数据,即 list1

【问题讨论】:

  • 克隆列表:list2 = new ObservableCollection(list1.Select(x => x.Clone()));
  • 感谢@jdweng 它与克隆一起使用

标签: c# list reference observablecollection


【解决方案1】:

感谢@jdweng 让我知道克隆

为了让它正常工作,我需要在我的模型中实现 ICloneable 接口。

这是 ICloneable 实现的好例子 https://www.c-sharpcorner.com/UploadFile/dacca2/important-interface-in-net-work-with-icloneable-interface/

那我用过

 list2 = new ObservableCollection<Model>(list1.Select(c=>(Model)c.Clone()));

它运行没有任何问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-23
    • 2014-05-17
    • 2018-03-06
    • 1970-01-01
    • 2021-05-08
    • 1970-01-01
    • 2010-11-22
    • 1970-01-01
    相关资源
    最近更新 更多