好吧所以我有从list中提取的List list1,我想暂时将其保存到List list2,对list1执行一些操作,将其保存到db,然后使用list2并将其保存到db。问题是因为当我更改list1中的某些字段时,是通过引用传递的,所以list2已经更新。
有没有办法将整个列表作为值传递?
以下是一些更清晰的代码:
var CurrentMenuItems = dbContext.menu_items.Where(m => m.optgroup == currentGroup && m.day_id == menuItem.day_id).ToList();
List<menu_item> MenuItemsToBeEditedAfterSubmitChanges = CurrentMenuItems;// we need to store this by value, so we can update it later
byte ItemIncrease = 50; // To store temp value so we can avoid duplicate entry for item number
foreach (var item in CurrentMenuItems)
{
item.optgroup = nextGroup;
item.item = ItemIncrease;
ItemIncrease++;
}
var menuItemsToBeReplaced = dbContext.menu_items.Where(m => m.optgroup == nextGroup && m.day_id == menuItem.day_id).ToList(); // we want to move all items within this group
dbContext.SubmitChanges();
foreach (var item in menuItemsToBeReplaced)
{
item.optgroup = currentGroup;
item.item = (byte)(item.item - 1);
}
dbContext.SubmitChanges();
// After first save, update the first group of menu items
foreach (var item in MenuItemsToBeEditedAfterSubmitChanges)
{
item.optgroup = nextGroup;
item.item = (byte)(item.item + 1);
}
dbContext.SubmitChanges();
答案 0 :(得分:3)
另一种解决方案:
IList<string> f = new List<string>();
var t = f.ToList();
答案 1 :(得分:2)
您可以尝试使用List<T>
的{{1}}构造函数。例如:
IEnumerable<T>
答案 2 :(得分:0)
List<object> list2 = new List<object>(list1);
这会阻止您引用其他列表,因为这些值已被复制。
答案 3 :(得分:0)
我认为给定的答案仅适用于值类型。 对于引用类型,您应该实现一个克隆方法,该方法复制同一类的新实例上的所有数据 然后,对于列表中的每个元素,您将在另一个列表中添加克隆对象