首页 新闻 会员 周边

C#求助:如何在Dictionary中add元素时用同一个list add不同值

0
悬赏园豆:10 [已解决问题] 解决于 2016-05-25 15:04

如上图代码,为啥输出结果不是:

1 --> A
2 --> B
3 --> C
4 --> D

这个地方不是很明白,就算list里面存放的地址,我也是先add到字典里面了,add了4次也应该是4个不同的地址啊?

yangyong0615的主页 yangyong0615 | 初学一级 | 园豆:154
提问于:2016-05-25 13:48
< >
分享
最佳答案
0

賦予Dictionary的list只是指針,你每一次clear()都是對實際的list

你應該認為list給到Dictionary後,clear()不會影響導Dictionary裡的list,但實際上是會的,這樣就可以理解了吧

收获园豆:10
RosonJ | 老鸟四级 |园豆:4910 | 2016-05-25 14:00

对,我就是这个地方理解不了,我明明已经把list添加到字典里面了,照理说这个时候list在发生改变的时候就应该和Dictionary无关了才对

yangyong0615 | 园豆:154 (初学一级) | 2016-05-25 14:09

@yangyong_yy: 

你可以去了解一下值類型和引用類型,園子裡有很多講這個的文章

RosonJ | 园豆:4910 (老鸟四级) | 2016-05-25 14:11

@RosonJ: 

当我第一次list.Add("A")的时候list里面应该存的是指向字符串A的指针,当第二次list.Add("B")的时候list当中存的就是指向字符串B的指针,而A的指针和B的指针应该是不一样的,所以我觉得不管是值类型还是引用类型应该是一样的。

这个还有个疑问,Dictionary执行Add操作时候是否Add一个执行一个,还是所有的Add操作一起执行,如果是一起执行的话那就出这种结果就不奇怪了。

yangyong0615 | 园豆:154 (初学一级) | 2016-05-25 14:23

@yangyong_yy: 

Dictionary的add是每次執行的,這沒有疑問

你需要釐清的是,dic1.Add(1, list);這個動作給dic1的是list的指針,而不是值

且list的值會隨著你之後的操作變化,你對這部分的理解有誤

RosonJ | 园豆:4910 (老鸟四级) | 2016-05-25 14:27

@RosonJ: 

嗯,明白了,dic1中存的是指向list的指针,而不是list里面存的指针,而指向list的指针始终都是同一个

yangyong0615 | 园豆:154 (初学一级) | 2016-05-25 14:37

@yangyong_yy: 

是的

RosonJ | 园豆:4910 (老鸟四级) | 2016-05-25 14:45
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册