我正在尝试使用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
}
我理解我可以通过将项目复制到另一个列表等来以另一种方式执行此操作,但是所有测试都显示上面的代码确实删除了第一个项目,但视图没有反映这一点。
有什么想法吗?
答案 0 :(得分:7)
每当您删除项目时索引都会更改。例如,在删除第0项后,作为第1项的项目现在将是第0项。为了防止这种情况从头到尾删除项目:
foreach(int item in removeitems.OrderByDescending(n => n))
{
model.ListItems.RemoveAt(item);
}
答案 1 :(得分:0)
这可能听起来很愚蠢,但你的结果是否有可能被其他地方覆盖?