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.
精彩评论