C#List被视为指针而不是对象的容器

时间:2016-04-09 02:37:13

标签: c# .net list

我已经弄明白这里发生了什么,但我想要一些确认。 (代码位于问题的底部)

我有一个List对象,我需要制作一个副本

我尝试过的方法是创建另一个相同类型的列表,然后使用' ='操作数,我也用AddRange方法测试并得到了相同的结果。

无论我如何操纵List的副本,它都会将操作应用于原始文件。

我相信这是因为C#使用列表作为引用/指针结构而不是对象/值。这是对的吗?

 temp1.AddRange(list1);
 temp2.AddRange(list2);


            foreach(record item in temp1)
            {
                foreach (KeyValuePair<string, string> itemB in temp2.First().data)
                {
                    item.data.Add(itemB.Key, null);
                    ERRORDATA = "item data state:" + item.ToString() + "\r\nitemB key:[" + itemB.Key + "] " + itemB.Value;
                }
            }

temp1.First().data.Add("DOOBY", "doo");

执行此操作后,list1插入了dooby,doo键/值对,当 只对temp1对象执行该操作时。

欢呼任何答案。

1 个答案:

答案 0 :(得分:0)

在我看来,您对“list”temp1的更改感到困惑,并更改了每个列表所持有的对象。每个列表保存的对象只是对对象的引用,因此对一个列表中的对象所做的更改将反映在其他列表中。但是,如果你执行了temp1.Add(o),则不会将o添加到temp2。