2

わかりましたので、dbからプルしたList list1があり、これをList list2に一時的に保存し、list1で何らかの操作を実行してdbに保存し、list2で遊んでdbに保存します。問題は、list1 のいくつかのフィールドを変更すると is が参照渡しされるため、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

与えられた答えは値型に対してのみ機能すると思います。参照型の場合、同じクラスの新しいインスタンスにすべてのデータをコピーする clone メソッドを実装する必要があります 次に、リスト内の各要素に対して、別のリストに複製されたオブジェクトを追加します

于 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 に答える