我遇到了一個相當奇怪的問題。我正在迭代List類型,並在我的循環中將迭代器變量分配給另一個本地對象。現在改變該本地對象中的任何內容都會導致循環迭代的List中的更改。讓我使用代碼示例清除它。Foreach循環內部的計算會影響迭代列表值
var balances = DBHelperADO.Select("select * from Orders");
// balances is of type List<MyModel>
foreach (var item in balances)
{
MyModel model = new MyModel();
model = item;
var thisQty = details.Where(x => x.Code == item.Code).Sum(x => x.QTY);
// details is another List<MyModel> holding values from the GUI
model.BLNC = model.BLNC - thisQty;
model.VAL = (model.BLNC == 0) ? 0 : model.VAL - (thisQty * model.RATE);
model.TABLE = "Orders";
toUpdate.Add(model); // toUpdate is a List<MyModel>
}
現在,我的理解是,迭代變量(在這種情況下,項目)是隻讀的,當我寫:
模型=項目;
:我將我項目值的副本。但是當我在模型對象上進行計算時,它會在餘額列表上導致相同的更改。
我不明白爲什麼它影響餘額清單。我正在執行局部範圍的模型對象的計算。那麼爲什麼這些反映在迭代列表(餘額)。
請幫我看看我做錯了什麼。
問候
非常感謝。那LINQ選擇真的很優雅。 –