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)毎回新しいアイテムを返していないように見えます。同じアイテム、または少なくとも既存のアイテムの 1 つを返すだけです。新しいアイテムを作成し、そのアイテムの値の一部をコピーして (それが意図されている場合)、その新しいアイテムをリストに追加する必要があります。

于 2013-06-12T15:06:53.440 に答える
0

一応、参考程度に更新します。オブジェクトのコピーを作成するか、可能であればクローンを作成します。

于 2013-06-12T15:10:46.233 に答える