将List <t>分配给另一个List <t>按值而不是引用</t> </t>

时间:2013-03-25 15:30:07

标签: c# list

好吧所以我有从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();

4 个答案:

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

这会阻止您引用其他列表,因为这些值已被复制。

请参阅:http://msdn.microsoft.com/en-us/library/fkbw11z0.aspx

答案 3 :(得分:0)

我认为给定的答案仅适用于值类型。 对于引用类型,您应该实现一个克隆方法,该方法复制同一类的新实例上的所有数据 然后,对于列表中的每个元素,您将在另一个列表中添加克隆对象