我有一个StockMultibuy
项目列表,正在构建这些项目的列表。列表中的某些项目我希望具有与现有项目不同的属性,因此我尝试创建项目的新实例,更改了我想要的属性,然后将其添加到列表中。我没想到会更新列表中已有的项目。这是预期的行为吗?我能做些什么来克服这个问题吗?
由于
StockMultibuy aNewItem = StaticLists.GetStockMultibuyForBarcode(sBarcode);
// If we've got enough items to qualify, then add a free item
if (Reward.StockItemsTaken.Count % (Reward.FreeWhenQualified + Reward.QualifyingQty)
== Reward.QualifyingQty)
{
aNewItem.PromoPrice = 0;
}
// Save this for later so that we know we've added a regular item
else
{
aNewItem.PromoPrice = Convert.ToDecimal(aNewItem.Sell);
}
Reward.StockItemsTaken.Add(aNewItem);
答案 0 :(得分:6)
您没有在列表中添加多个不同的项目,您需要多次添加相同的项目,并且每次都进行修改。
C#中的类是引用类型;这意味着每个变量都不包含对象本身的数据,它只是保留对该对象所在位置的引用。将对象分配给另一个变量不会创建新对象,它只是将对该对象的引用复制。
问题在于,每当您向列表中添加新项目时,您应该创建一个新对象(即使用new
关键字)。
从代码的外观来看,似乎StaticLists.GetStockMultibuyForBarcode(sBarcode)
每次都没有返回新项目;它只是返回相同的项目,或至少返回一个现有项目。您应该创建一个新项目,复制该项目的一些值(如果这是您的意图),然后将该新项目添加到列表中。
答案 1 :(得分:0)
预计会更新,因为它是一个参考。如果可以的话,我只会制作一个对象的副本或克隆它。