我正在创建一个名为MyComposedModel的对象列表。
List<MyComposedModel> TheListOfModel = new List<MyComposedModel>();
MyComposedModel ThisObject = new MyComposedModel();
foreach (MyComposedModel in some list of MyComposedModel)
{
ThisObject.Reset(); //clears all properties
....
TheListOfModel.Add(ThisObject);
}
问题在于每次for-each循环迭代并执行.Add语句时,列表将重新填充n + 1个对象,列表中的每个对象都是ThisObject。因此,例如,第二次运行时,最后一项正确插入位置[1]但是[0]中的第一项被替换为第二项,而列表包含两个位置中的第二项。
ThisObject有一个名为ID的属性,当我调试时,我看到ID更改,所以我知道它正在通过列表但是当它到达.Add行时,我不知道会发生什么。
我错过了什么?
谢谢
答案 0 :(得分:6)
你只有一个对象......
MyComposedModel
是参考类型。您正在填充一个列表,其中包含对同一个对象的引用,并且只有最后一个属性。
你可能需要什么:
foreach (MyComposedModel otherObject in some list)
{
//ThisObject.Reset(); // clears all properties
thisObject = new MyComposedModel(); // create a new instance instead
....
TheListOfModel.Add(thisObject);
}
答案 1 :(得分:1)
看起来你一遍又一遍地错误地重复使用对同一个对象的引用。
执行此操作时:
MyComposedModel ThisObject = new MyComposedModel();
创建对新对象的单个引用并将其放在堆栈上。当您迭代列表并执行此操作时:
ThisObject.Reset(); //clears all properties
它仍指向SAME引用,您只需要创建一个“MyComposedModel”类型的新对象,设置它的属性并将其添加到列表中。