2

好的,所以我有从 db 中提取的 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

4 回答 4

4

您可以尝试使用List<T>带有IEnumerable<T>. 例子:

List<int> originalList = new List<int>() { 0, 1, 2 };
List<int> copiedList = new List<int>(originalList);
copiedList[2] = 3; // originalList[2] still is 2
于 2013-03-25T15:32:59.340 回答
3

只是另一个解决方案:

IList<string> f = new List<string>();

var t = f.ToList();
于 2013-03-25T15:43:23.430 回答
0

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

于 2013-03-25T15:38:27.563 回答
0
List<object> list2 = new List<object>(list1);

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

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

于 2013-03-25T15:33:36.383 回答