应该在列表中添加新项目<>更新列表中的上一个项目?

时间:2013-06-12 15:02:56

标签: c#

我有一个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);

2 个答案:

答案 0 :(得分:6)

您没有在列表中添加多个不同的项目,您需要多次添加相同的项目,并且每次都进行修改。

C#中的类是引用类型;这意味着每个变量都不包含对象本身的数据,它只是保留对该对象所在位置的引用。将对象分配给另一个变量不会创建新对象,它只是将对该对象的引用复制。

问题在于,每当您向列表中添加新项目时,您应该创建一个新对象(即使用new关键字)。

从代码的外观来看,似乎StaticLists.GetStockMultibuyForBarcode(sBarcode)每次都没有返回新项目;它只是返回相同的项目,或至少返回一个现有项目。您应该创建一个新项目,复制该项目的一些值(如果这是您的意图),然后将该新项目添加到列表中。

答案 1 :(得分:0)

预计会更新,因为它是一个参考。如果可以的话,我只会制作一个对象的副本或克隆它。