向列表中添加新项目,替换列表中的旧项目

时间:2018-11-19 13:02:45

标签: c# asp.net .net asp.net-mvc

我正在使用下面的代码来遍历项目并向列表中添加项目。但是,在向列表中添加项目时,列表中的旧项目被替换为新项目。 如何避免列表中的项目替换。

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

            }

3 个答案:

答案 0 :(得分:2)

主要问题是,您需要先从原始列表中修改对象,然后再将其添加到最终列表中。

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

这里menu对象是从iMenuList提取的,然后进行了修改

menu.MenuMappings = null;

这将导致原始列表中的对象被修改。 如果要更改传递给finalList的对象,但又不想修改存储在原始List中的对象,则必须使用复制新对象(克隆)的方法。

答案 1 :(得分:0)

问题已通过以下代码解决

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

            }

答案 2 :(得分:-1)

您可以在类中重写Equals方法以为每个对象返回唯一的内容。这样可以避免替换对象。