根据需求,传递一个SortList a,a是读取的xml文件,a中有多个prod_id是相同的,我要根据a重新生成一个SortList b,将相同prod_id的值合并为一个,其中主要是为了将a中相同的prod_id的节点中的count合并,其他节点时相同的。
后续操作中我需要用刚传递过来的SortList a进行计算,但是因为有了之前的合并操作,导致原先传递的SortList中的值也发生了变化,我想通过某种容器将SortList a先存起来,但是只要一进行合并,a 还是会发生变化,
如图中application_items_dicts是将a先存放至一个介质中,product_promotion_items_dicts是进行合并。
我的问题是希望各位大侠帮忙看下,怎么样改变其中一个SortList中的某一个节点的value,另一个SortList不变呢,谢谢
深度复制该对象
深度复制以后,还是会变
@JasonNET: 怎么深度复制的?能说下代码么?另一种解决方法是,直接重新创建一个SortList对象,然后,把操作后的数据放入其中。
@sinhbv:
@sinhbv: 你说的另一个方法我试过了 不行
@JasonNET: 您这连浅复制都算不上吧,就是给引用包了个壳
@sinhbv: 使用迭代?
class Program { static void Main(string[] args) { List<Entity> a = new List<Entity>(); a.Add(new Entity { property = "0" }); a.Add(new Entity { property = "1" }); a.Add(new Entity { property = "2" }); a.Add(new Entity { property = "3" }); a.Add(new Entity { property = "4" }); List<Entity> b = deepCopy(a); } public static List<Entity> deepCopy(List<Entity> list) { List<Entity> cList = new List<Entity>(); foreach (var item in list) { Entity data = new Entity(item); cList.Add(data); } return cList; } public class Entity { public Entity(Entity item) { property = item.property; } public Entity() { } public string property { set; get; } } }
基本上就是这样,因为例子中的引用深度比较低,所以看着比较简单,如果引用深度比较高,那么需要更深层的复制。
@sinhbv: 我根据你提供的思路,进行整理后,还是不行
@JasonNET: 你怎么做的?代码发来看看
@sinhbv:
@JasonNET: 从你的代码上明显可以看出来,你根本没有理解浅复制和深复制的意思。我给出的代码中,Entity只是一个实体,他可能是任何一种对象,而property是他的一个属性。意思就是说,在复制的过程中,创建了新的实体,而不是原实体的引用,同时,将实体的属性复制给新的实体。我所不明白的是楼主,为什么一直在纠结于将一个对象的引用去来回赋值呢?你需要做的是,创建一个新的SortList对象,然后,遍历原来SortList,根据其中的实体的原有属性,重新创建实体,并将之加入到新的SortList中去。不知道这么说楼主能不能明白。
@sinhbv: 我理解你的意思,是这样我根据传递过来的SortedList循环然后将值取出,放置到另一个新的SortedList中,然后对原来的进行操作更新,新生成的这个SortedList中的值也会发生变化。
重新开辟一个对象。
如何重新开辟对象呢?
用两个对象最后在合并!
什么意思?我是不是可以这么理解:新建2个SortedList,然后操作其中一个?