J'utilise le code ci-dessous pour parcourir les éléments et ajouter des éléments à la liste.Mais lors de l'ajout d'éléments à la liste, les anciens éléments de la liste sont remplacés par de nouveaux éléments. Comment puis-je éviter le remplacement d'articles dans la liste.

  var finalMenuList=new List<IMenu>();

        foreach(var menuSKU in iMenuSKUList)
            {

                    var menu = new IMenuSKU();
                    menu=iMenuList.Where(a => a.Id == menuSKU.Id).ToList()[0];
                    var menuSpecs=new List<IMenuMapping>() ;
                    menuSpecs= iMenuCompleteSKUList.Where(a => a.Id == menuSKU.Id ).ToList();
                    var media = new List<IMenuMedia>();
                    media = iMediaList.Where(a => a.Id == menuSKU.Id).ToList();
                    menu.MenuMappings = null;
                    menu.MenuMappings = menuSpecs;
                    menu.MenuMedias = null;
                    menu.MenuMedias = media;
                    finalMenuList.Add(menu);

            }
1
Chandra sekhar 19 nov. 2018 à 16:02

3 réponses

Meilleure réponse

Le problème a été résolu avec le code ci-dessous

foreach(var menuSKU in iMenuSKUList)
            {

                    var menu = new IMenuSKU();
                    menu=iMenuList.Where(a => a.Id == menuSKU.Id).ToList()[0];
                    var menuSpecs=new List<IMenuMapping>() ;
                    menuSpecs= iMenuCompleteSKUList.Where(a => a.Id == menuSKU.Id ).ToList();
                    var media = new List<IMenuMedia>();
                    media = iMediaList.Where(a => a.Id == menuSKU.Id).ToList();
                    menu.MenuMappings = null;
                    menu.MenuMappings = menuSpecs;
                    menu.MenuMedias = null;
                    menu.MenuMedias = media;
   // issue has been resolved by creating new instance of object and reassigning it's properties with values as below and finally storing it in list.
                    var finalList = new IMenuSKU
                        {
                            MenuMappings = menu.MenuMappings,
                            MenuMedias  = menu.MenuMedias,
                           //bind remaining properties here
                        };                  

              finalMenuList.Add(finalList);

            }
0
Chandra sekhar 21 nov. 2018 à 06:55

Vous pouvez remplacer la méthode Equals dans votre classe pour renvoyer quelque chose d'unique pour chacun des objets. Cela évitera le remplacement des objets.

-1
Alphonse Kurian 19 nov. 2018 à 13:06

Le problème principal est que vous modifiez l'objet de la liste d'origine avant de l'ajouter à la liste finale.

menu=iMenuList.Where(a => a.Id == menuSKU.Id).ToList()[0];

Ici, l'objet menu est extrait de iMenuList puis modifié

menu.MenuMappings = null;

Cela entraîne la modification de vos objets de la liste d'origine. Si vous souhaitez modifier l'objet qui est passé à finalList, mais que vous ne souhaitez pas en modifier un qui est stocké dans la liste d'origine, vous devez travailler avec, copiez le nouvel objet (cloner).

2
Tomas Chabada 19 nov. 2018 à 13:40