添加到列表重新填充最后一个元素

时间:2011-06-03 20:09:43

标签: c#

我正在创建一个名为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行时,我不知道会发生什么。

我错过了什么?

谢谢

2 个答案:

答案 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”类型的新对象,设置它的属性并将其添加到列表中。