错误记录--关于foreach,集合已修改;可能无法执行枚举操作

集合已修改,可能无法执行枚举操作。今天在使用foreach遍历的时候出现了这样的错误。查了一下,这个是使用foreach的典型的错误问题问题。foreach在遍历取数据的过程中,枚举器只允许读,不允许更改其中的数据,包括修改删除添加。这种情况下如果需要改动数据,应该使用for遍历。

错误代码

 1         /// <summary>
 2         /// 获得表中不含列名id的所有列名
 3         /// </summary>
 4         /// <param name="dtCols"></param>
 5         /// <returns></returns>
 6         private static string[] GetColsWithoutId(DataTable dtCols)
 7         {
 8             List<string> list = new List<string>();
 9             list.AddRange(GetCols(dtCols));
10             foreach (string colname in list)
11             {
12                 if (colname.Equals("id", StringComparison.CurrentCultureIgnoreCase))
13                 {
14                     list.Remove(colname);//foreach是只读的,在取的时候数据不能变(包括修改,删除,添加等)--避免出现错误:集合已修改;可能无法执行枚举操作
15                 }
16             }
17             return list.ToArray();
18         } 
foreach经典错误

修改代码

 1         /// <summary>
 2         /// 获得表中不含列名id的所有列名
 3         /// </summary>
 4         /// <param name="dtCols"></param>
 5         /// <returns></returns>
 6         private static string[] GetColsWithoutId(DataTable dtCols)
 7         {
 8             List<string> list = new List<string>();
 9             list.AddRange(GetCols(dtCols));
10             //foreach(string colname in list)
11             //{
12             //    if(colname.Equals("id",StringComparison.CurrentCultureIgnoreCase))
13             //    {
14             //        list.Remove(colname);//foreach只读,在取的时候数据不能变(包括修改,删除,添加等)--避免出现错误:集合已修改
15             //    }
16             //}
17             for (int i = list.Count - 1; i >= 0; i--)//foreach只读,在取的时候数据不能变(包括修改,删除,添加等)--避免出现错误:集合已修改;可能无法执行枚举操作,采用for,从最后一个开始遍历,避免遗漏
18             {
19                 if (list[i].Equals("id", StringComparison.CurrentCultureIgnoreCase))
20                 {
21                     list.RemoveAt(i);
22                 }
23             }
24             return list.ToArray();
25         } 
for-修改代码

 

posted @ 2013-06-22 01:39  maidol  阅读(1073)  评论(4编辑  收藏  举报