首页 新闻 搜索 专区 学院

2个相同的SortList,其中一个变化,怎么能让另一个不变?各位大侠帮帮忙,在线等!!!

0
悬赏园豆:50 [已解决问题] 解决于 2012-06-11 17:46

根据需求,传递一个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不变呢,谢谢

问题补充:

可能我说的不明白,是这样,经过合并后的SortedList在整个程序中只有一处用到,其他地方都是用没有合并之前的SortedList

JasonNET的主页 JasonNET | 初学一级 | 园豆:168
提问于:2012-06-11 13:39
< >
分享
最佳答案
0

深度复制该对象

收获园豆:50
sinhbv | 老鸟四级 |园豆:2579 | 2012-06-11 14:02

深度复制以后,还是会变

JasonNET | 园豆:168 (初学一级) | 2012-06-11 14:28

@JasonNET: 怎么深度复制的?能说下代码么?另一种解决方法是,直接重新创建一个SortList对象,然后,把操作后的数据放入其中。

sinhbv | 园豆:2579 (老鸟四级) | 2012-06-11 14:43

@sinhbv: 

JasonNET | 园豆:168 (初学一级) | 2012-06-11 14:47

@sinhbv: 你说的另一个方法我试过了 不行

JasonNET | 园豆:168 (初学一级) | 2012-06-11 14:49

@JasonNET: 您这连浅复制都算不上吧,就是给引用包了个壳

sinhbv | 园豆:2579 (老鸟四级) | 2012-06-11 14:52

@sinhbv: 使用迭代?

JasonNET | 园豆:168 (初学一级) | 2012-06-11 14:58
@JasonNET: 

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 | 园豆:2579 (老鸟四级) | 2012-06-11 15:03

@sinhbv: 我根据你提供的思路,进行整理后,还是不行

JasonNET | 园豆:168 (初学一级) | 2012-06-11 15:35

@JasonNET: 你怎么做的?代码发来看看

sinhbv | 园豆:2579 (老鸟四级) | 2012-06-11 15:37

@sinhbv: 

JasonNET | 园豆:168 (初学一级) | 2012-06-11 15:55

@JasonNET: 从你的代码上明显可以看出来,你根本没有理解浅复制和深复制的意思。我给出的代码中,Entity只是一个实体,他可能是任何一种对象,而property是他的一个属性。意思就是说,在复制的过程中,创建了新的实体,而不是原实体的引用,同时,将实体的属性复制给新的实体。我所不明白的是楼主,为什么一直在纠结于将一个对象的引用去来回赋值呢?你需要做的是,创建一个新的SortList对象,然后,遍历原来SortList,根据其中的实体的原有属性,重新创建实体,并将之加入到新的SortList中去。不知道这么说楼主能不能明白。

sinhbv | 园豆:2579 (老鸟四级) | 2012-06-11 16:12

@sinhbv: 我理解你的意思,是这样我根据传递过来的SortedList循环然后将值取出,放置到另一个新的SortedList中,然后对原来的进行操作更新,新生成的这个SortedList中的值也会发生变化。

JasonNET | 园豆:168 (初学一级) | 2012-06-11 17:21
其他回答(2)
0

重新开辟一个对象。

悟行 | 园豆:12429 (专家六级) | 2012-06-11 14:05

如何重新开辟对象呢?

支持(0) 反对(0) JasonNET | 园豆:168 (初学一级) | 2012-06-11 14:32
0

用两个对象最后在合并!

MingHao_Hu | 园豆:8 (初学一级) | 2012-06-11 15:49

什么意思?我是不是可以这么理解:新建2个SortedList,然后操作其中一个?

支持(0) 反对(0) JasonNET | 园豆:168 (初学一级) | 2012-06-11 15:58
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册