列表.add()的C#问题

时间:2013-04-04 18:45:16

标签: c# list

我有一个班级:

ProductData ProductData = new ProductData(); 

并创建了一个列表:

List<ProductData> ProductDataList = new List<ProductData>();

当我将项目添加到列表中时:

ProductDataList.Add(ProductData);

列表中的最后一个元素是覆盖所有以前的元素,我不知道为什么会这样,有人可以帮忙吗?

这里有更多的结构:

ProductData ProductData = new ProductData();

List<ProductData> ProductDataList = new List<ProductData>();

while (myReader.Read())
                {
                    ProductData.value = “some values I am assigning go here”;

          ProductDataList.Add(ProductData);
       };

2 个答案:

答案 0 :(得分:9)

您不是在创建多个新的ProductData个实例,而是一遍又一遍地改变同一个实例。

你几乎肯定想要从你的循环外部移动到ProductData ProductData = new ProductData();行内部。这将确保您创建N个实例,而不是一个。

答案 1 :(得分:1)

我敢打赌你的完整代码必须是这样的:

ProductData ProductData = new ProductData(); 
ProductData.Something = "1st";

ProductDataList.Add(ProductData);

ProductData.Something = "1st";

ProductDataList.Add(ProductData);

ProductData.Something = "2nd";

ProductDataList.Add(ProductData);

ProductData.Something = "3rd";

ProductDataList.Add(ProductData);

而且你说它被覆盖,因为它们都具有“第三”的价值。 这不是列表的问题,而是对象实例

请注意,您只创建了一个实例,那里是new ProductData。当您更改它时,您不是在创建新实例,而只是更改您唯一的实例。

您应该为每个对象创建新实例。