经常在项目中遇到要删除集合中某些元素,而用foreach遍历集合时,不能在遍历集合时直接移除要移除的元素,
在这里总结了集合筛选的方法:
static void Main(string[] args){ ListpersonList = new List { new Person{Name="张三",Gender="男",Age=19}, new Person{Name="李四",Gender="男",Age=34}, new Person{Name="春丽",Gender="女",Age=20}, new Person{Name="老王",Gender="男",Age=37}, new Person{Name="小红",Gender="女",Age=18}, };//移除年龄大于25,且性别为男的person//方法一:linq 扩展方法where()//personList = personList.Where(p=>p.Gender=="男"&&p.Age>25).ToList();#region 方法二:遍历集合找到所有要移除的元素,装到一个临时集合里,然后取两个集合的差集List personList2 = new List ();foreach (Person p in personList){ if (p.Gender == "男"&&p.Age >25) { personList2.Add(p);//装到临时集合里 }}//取两个集合的差集personList = personList.Except(personList2).ToList();//因为是延迟查询,所有ToList()一下赋值给原集合,原集合即为筛选后的集合//输出foreach (Person p in personList){ Console.WriteLine(p.Name+" "+p.Gender+" "+p.Age);}Console.ReadKey();}}#endregion
public class Person{private string namr;public string Name{get { return namr; }set { namr = value; }}private string gender;public string Gender{get { return gender; }set { gender = value; }}private int age;public int Age{get { return age; }set { age = value; }}}
总结:推荐第一种写法:扩展方法(lambda表达式),代码简洁,一气呵成。