未从列表中删除的项目

时间:2012-10-29 16:19:36

标签: c# .net

我有以下代码。在我的测试planList集合中有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;
...

8 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:3)

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

答案 2 :(得分: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;

答案 3 :(得分: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

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

planList尚未更改。

planList.ToList()  //This creates a new list.
.RemoveAll()       //This is called on the new list.  It is not called on planList.

答案 6 :(得分: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;

答案 7 :(得分:0)

代码应该是

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

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

int countItems = planList.Count;