我正在研究一个系列。我需要从集合中删除一个项目并使用过滤/删除的集合。
这是我的代码
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是 相同类型,但它属于不同的集合。
答案 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);