我正在使用下面的代码来遍历项目并向列表中添加项目。但是,在向列表中添加项目时,列表中的旧项目被替换为新项目。 如何避免列表中的项目替换。
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);
}
答案 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方法以为每个对象返回唯一的内容。这样可以避免替换对象。