我有一个班级:
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);
};
答案 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
。当您更改它时,您不是在创建新实例,而只是更改您唯一的实例。
您应该为每个对象创建新实例。