1

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

2 回答 2

6

您不是在列表中添加几个不同的项目,而是多次添加相同的项目并每次都对其进行修改。

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

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

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

于 2013-06-12T15:06:53.440 回答
0

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

于 2013-06-12T15:10:46.233 回答