0

我有以下代码。在我的测试计划列表集合中有 150 项。删除后计数为 75,这意味着从列表中删除了 75 个项目。为什么在那之后 countItems 列表是 150。似乎没有从列表中删除项目。为什么?如何从列表中删除项目。

...
planList = (IList<UserPlanned>)_jsSerializer.Deserialize(plannedValues,typeof(IList<UserPlanned>));
int count = planList.ToList().RemoveAll(eup => eup.ID <= -1);
int countItems = planList.Count;
...
4

8 回答 8

6

当您调用 ToList() 时,它会复制您的列表,然后从副本中删除项目。利用:

int count = planList.RemoveAll(eup => eup.ID <= -1);  
于 2012-10-29T16:21:59.273 回答
3

实际上,您是从由 ToList 方法创建的列表中删除元素,而不是从 planList 本身。

于 2012-10-29T16:22:02.523 回答
1

ToList()正在创建要从中删除项目的不同列表。这基本上就是你正在做的事情:

var list1 = (List<UserPlanned>)_jsSerializer.Deserialize(plannedValues,typeof(List<UserPlanned>));
var list2 = list1.ToList(); // ToList() creates a *new* list.

list2.RemoveAll(eup => eup.Id <= -1);

int count = list2.Count;
int count2 = list1.Count;
于 2012-10-29T16:24:06.780 回答
1
var templst = planList.ToList();
int count = templst.RemoveAll(eup => eup.ID <= -1);
int countItems = templst.Count;

那应该工作。如上所述,tolist 命令创建一个新列表,从中删除值。我不知道你的 planList 的类型,但如果它已经是一个 List,你可以简单地省略 .tolist

int count = planList.RemoveAll(eup => eup.ID <= -1);

请原谅摇摇欲坠的c#,我正在正常编写vb.net

于 2012-10-29T16:24:23.927 回答
0

代码应该类似于

lanList = (List<UserPlanned>)_jsSerializer.Deserialize(plannedValues,typeof(List<UserPlanned>));

int count = planList.RemoveAll(eup => eup.ID <= -1);

int countItems = planList.Count;
于 2012-10-29T16:33:45.867 回答
0
planList = (List<UserPlanned>)_jsSerializer.Deserialize(plannedValues,typeof(List<UserPlanned>));
int count = planList.RemoveAll(eup => eup.ID <= -1);
int countItems = planList.Count;

删除ToList(). 这是在内存中创建一个新列表,因此您永远不会真正更新您的基础列表。你也不需要它。

于 2012-10-29T16:23:20.127 回答
0

planList 没有改变。

planList.ToList()  //This creates a new list.
.RemoveAll()       //This is called on the new list.  It is not called on planList.
于 2012-10-29T16:23:22.123 回答
0

planList.ToList() 创建 RemoveAll 操作的新列表。它不会修改 IEnumerable planList。

尝试这样的事情:

planList = (List<UserPlanned>)_jsSerializer
     .Deserialize(plannedValues,typeof(List<UserPlanned>))
    .ToList();
int count = planList.RemoveAll(eup => eup.ID <= -1);
int countItems = planList.Count;

如果您使用的是 JavaScriptSerializer, http: //msdn.microsoft.com/en-us/library/bb355316.aspx_ 然后试试这个:

planList = _jsSerializer.Deserialize<List<UserPlanned>>(plannedValues);

int count = planList.RemoveAll(eup => eup.ID <= -1);
int countItems = planList.Count;
于 2012-10-29T16:26:05.823 回答