2013-06-12 36 views
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); 
+5

請理解_references_的概念。 –

+0

如果您已經在列表中有相同的項目,它仍然會添加新項目,並且不會修改任何內容。它會修改的唯一原因是如果你在某個地方告訴它。 –

+0

請顯示'StaticLists.GetStockMultibuyForBarcode(sBarcode)'方法代碼 –

回答

6

你不是增加幾個不同的項目列表中,您要添加的完全相同的項目好幾次,每次修改它。

C#中的類是引用類型;這意味着每個變量不保存對象本身的數據,它只是保持對該對象所在的引用。將對象分配給另一個變量不會創建新的對象,它只會將引用複製到同一對象。

問題在於,每次您將新項目添加到列表中時,都應該創建一個新對象(即使用關鍵字new)。

從代碼的外觀看,StaticLists.GetStockMultibuyForBarcode(sBarcode)每次都不會返回一個新項目;它只是返回相同的項目,或者至少返回一個現有項目。您應該創建一個新項目,將該項目的某些值複製(如果這是您的意圖),然後將該新項目添加到列表中。

0

預計它會更新,因爲它是一個參考。如果可以的話,我只需製作對象的副本或克隆它。