2

RemoveAt を使用してジェネリック リストからアイテムを削除しようとしています。奇妙なことに、デバッガーの使用中にアイテムが削除されていることがわかりますが、それをビューに渡すと、削除されたアイテムが表示されますが、最後のアイテムは削除されています。

コードは次のようになります

public ActionResult(MyModel model, int[] removeitems)
{
 //model.ListItems has 10 items
 //Incoming removeitems has 0 as the first item to remove as a test
foreach(int item in removeitems)
{
 model.ListItems.RemoveAt(item);
}
 //by this time debugger shows that item 0 has in fact been removed and no longer exists in the list
 return View(model);
 //after the view is rendered it shows item 0 is still there but 10 has been removed
}

アイテムを別のリストにコピーするなど、別の方法で実行できることは理解していますが、すべてのテストでは、上記のコードが最初のアイテムを削除することを示していますが、ビューにはこれが反映されていません。

何か案は?

4

2 に答える 2

7

アイテムを削除するたびに、インデックスが変更されます。たとえば、0 番目のアイテムを削除すると、1 番目のアイテムだったアイテムが 0 番目になります。これを防ぐには、アイテムを最後から最初に削除します。

foreach(int item in removeitems.OrderByDescending(n => n))
{
    model.ListItems.RemoveAt(item);
}
于 2013-05-12T05:44:24.280 に答える
0

これはばかげているように聞こえるかもしれませんが、結果が別の場所から上書きされている可能性はありますか?

于 2013-05-12T05:39:32.300 に答える