Ajout à la liste repeuple avec le dernier élément

Je crée une liste d’objects appelée MyComposedModel.

List TheListOfModel = new List(); MyComposedModel ThisObject = new MyComposedModel(); foreach (MyComposedModel in some list of MyComposedModel) { ThisObject.Reset(); //clears all properties .... TheListOfModel.Add(ThisObject); } 

Le problème est que chaque fois que la boucle for-each itère et exécute l’instruction .Add, la liste est remplie avec n objects + 1 et chaque object de la liste est ThisObject. Ainsi, par exemple, lors de la deuxième exécution, le dernier élément est correctement inséré à la position [1] MAIS le premier élément de [0] est remplacé par le deuxième élément et la liste contient le deuxième élément aux deux positions.

ThisObject a une propriété appelée ID et lorsque je débogue, je vois l’ID changer. Je sais donc qu’il parcourt la liste, mais lorsqu’il atteint la ligne .Add, je ne sais pas ce qui se passe.

Qu’est-ce que je rate?

Merci

Vous avez seulement 1 object …

MyComposedModel est un type de référence. Vous remplissez une liste avec des références au même object et seules les dernières propriétés sont valables.

Ce dont vous avez probablement besoin:

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

Il semble que vous réutilisiez de manière incorrecte une référence au même object encore et encore.

Quand tu fais ça:

 MyComposedModel ThisObject = new MyComposedModel(); 

Cela crée une seule référence à un nouvel object et le place sur la stack. Lorsque vous parcourez votre liste et procédez comme suit:

 ThisObject.Reset(); //clears all properties 

Cela pointe toujours vers la référence SAME, vous devez simplement créer un nouvel object de type “MyComposedModel”, définir ses propriétés et l’append à la liste.