Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

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 iterates 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

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
174 views
Welcome To Ask or Share your Answers For Others

1 Answer

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);
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...