是否应该向列表中添加新项<>更新列表中先前的项

本文关键字:列表 更新 新项 添加 是否 | 更新日期: 2023-09-27 18:18:08

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

是否应该向列表中添加新项<>更新列表中先前的项

您不是在向列表中添加几个不同的项,而是在多次添加相同的项并每次修改它。

c#中的

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

问题是,你应该创建一个新的对象(即使用new关键字),每次你去添加一个新的项目到列表。

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

这是预期的,它将更新,因为它是一个引用。如果可以的话,我会复制一个对象或者克隆它。