从列表集中删除项目而不删除

时间:2013-02-02 07:39:27

标签: c# asp.net list collections

我正在研究一个系列。我需要从集合中删除一个项目并使用过滤/删除的集合。

这是我的代码

public class Emp{
  public int Id{get;set;}
  public string Name{get;set;}
}

List<Emp> empList=new List<Emp>();
Emp emp1=new Emp{Id=1, Name="Murali";}
Emp emp2=new Emp{Id=2, Name="Jon";}
empList.Add(emp1);
empList.Add(emp2);

//Now i want to remove emp2 from collection and bind it to grid.
var item=empList.Find(l => l.Id== 2);
empList.Remove(item);
  

问题是在删除项目后,我的收藏品仍显示计数为2。
     可能是什么问题?

编辑:

原始代码

  var Subset = otherEmpList.FindAll(r => r.Name=="Murali");

   if (Subset != null && Subset.Count > 0)
   {
    foreach (Empl remidateItem in Subset )
    {
       Emp removeItem = orginalEmpList.Find(l => l.Id== 
                                          remidateItem.Id);
                    if (removeItem != null)
                    {
                        orginalEmpList.Remove(remidateItem); // issue here

                    }
      }
    }
  

工作正常。在实际代码中我删除了remediateItem。 remediateItem是   相同类型,但它属于不同的集合。

4 个答案:

答案 0 :(得分:6)

您正在将对象传递给Remove,这些对象不在您尝试删除的列表中,而是将对象复制到其他列表中,这就是为什么不删除它们,使用List.RemoveAll方法传递谓词。

lst.RemoveAll(l => l.Id== 2);

如果要删除其他一些集合中的许多ID,例如ID数组

int []ids = new int[3] {1,3,7};
lst.RemoveAll(l => ids.Contains(l.Id))

答案 1 :(得分:1)

int removeIndex = list.FindIndex(l => e.Id== 2);
if( removeIndex != -1 )
{
    list.RemoveAt(removeIndex);
}

试试这可能对你有用

答案 2 :(得分:0)

你写错了你的lambda。它应该是这样的

var item=empList.Find(l => l.Id== 2);

答案 3 :(得分:0)

您粘贴的原始代码完美无缺。它相应地删除了项目。

List<Emp> empList = new List<Emp>();
Emp emp1 = new Emp { Id = 1, Name = "Murali" };
Emp emp2 = new Emp { Id = 2, Name = "Jon" };
empList.Add(emp1);
empList.Add(emp2);

//Now i want to remove emp2 from collection and bind it to grid.
var item = empList.Find(l => l.Id == 2);
empList.Remove(item);