1

我有一堂课:

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);
       };
4

2 回答 2

9

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

你几乎肯定只想移动这条线:ProductData ProductData = new ProductData();从你的循环外面到里面。这将确保您创建 N 个实例,而不是一个。

于 2013-04-04T18:46:50.163 回答
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);

你说它是覆盖,因为它们都具有“3rd”的值。这不是列表的问题,而是您的object instance

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

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

于 2013-04-04T18:51:15.550 回答