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

我正在创建一个名为MyComposedModel的对象列表。

List TheListOfModel = new List(); 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行时,我不知道会发生什么。

我错过了什么?

谢谢

你只有一个对象……

MyComposedModel是一个引用类型。 您正在填充一个列表,其中包含对同一个对象的引用,并且只有最后一个属性。

你可能需要什么:

 foreach (MyComposedModel otherObject in some list) { //ThisObject.Reset(); // clears all properties thisObject = new MyComposedModel(); // create a new instance instead .... TheListOfModel.Add(thisObject); } 

看起来你错误地重复使用了对同一个对象的引用。

当你这样做:

 MyComposedModel ThisObject = new MyComposedModel(); 

这会创建对新对象的单个引用并将其放在堆栈上。 当您迭代列表并执行此操作时:

 ThisObject.Reset(); //clears all properties 

它仍然指向SAME引用,您只需创建一个“MyComposedModel”类型的新对象,设置它的属性并将其添加到列表中。