一、C#遍历删除的两种方式
观察如下代码:我们希望去除80分一下的同学名称;
Dictionary<string,int> students=new Dictionary<string, int>();
students.Add("xiaoming",90);
students.Add("xiaohong",80);
students.Add("xiaolan",70);
foreach(KeyValuePair<string,int> stu in students){
if(stu.Value<80){
students.Remove(stu.Key);
}
}
运行之后发现了报错:Collection was modified; enumeration operation may not execute
报错的主要原因是:我们不能在foreach中对List以及Dictionary等进行元素的添加和删除操作;
如果是List,我们可以用for循环来避免这个问题,但是如果是Dictionary,我们就需要将其转换为List来解决这个问题;
方法一:
额外创建一个数组存储需要删除的所有Key值;
Dictionary<string,int> students=new Dictionary<string, int>();
students.Add("xiaoming",90);
students.Add("xiaohong",80);
students.Add("xiaolan",70);
List<string> otherStus=new List<string>();
foreach(var stu in students){
if(stu.Value<80){
otherStus.Add(stu.Key);
}
}
for(int i=1;i<otherStus.Count;i++){
students.Remove(otherStus[i]);
}
方法二:
使用System.Linq的ToList方法;
Dictionary<string,int> students=new Dictionary<string, int>();
students.Add("xiaoming",90);
students.Add("xiaohong",80);
students.Add("xiaolan",70);
List<string> stusName=students.Keys.ToList();
List<int> stusGrade=students.Values.ToList();
for(int i=1;i<stusGrade.Count;i++){
if(stusGrade[i]<80){
students.Remove(stusName[i]);
}
}
foreach(var stu in students){
Console.WriteLine(stu.Key);
}