开发者

Adding to list repopulates with the last element

I'm creating a list of objects called 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);
}

The problem is that each time the for-each loop ite开发者_运维知识库rates and executes the .Add statement, the list is repopulated with n+1 objects and every object in the list is ThisObject. So for instance, the second time it runs, the last item is correctly inserted in position [1] BUT the first item in [0] is replaced with the second item and the list contains the second item in both positions.

ThisObject has a property called ID and when I debug, I see the ID change so I know that it's going through the list but when it reaches the .Add line, I don't know what happens.

What am I missing?

Thanks


You have only 1 object...

MyComposedModel is a reference type. You are filling a list with references to the same single object, and only the last properties stand.

What you probably need:

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


It looks like you're incorrectly re-using a reference to the same object over and over.

When you do this:

MyComposedModel ThisObject = new MyComposedModel();

That create a single reference to a new object and places it on the stack. When you iterate your list and do this:

ThisObject.Reset(); //clears all properties

It's still pointing to the SAME reference, you need to just create a new object of type "MyComposedModel", set it's properties and add it to the list.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜