• 错误记录--关于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-修改代码
  • 相关阅读:
    HTTP协议
    jQuery中的事件模型
    AJAX请求 load方法的使用
    jQuery让页面动起来
    jQuery中的事件传播
    jQuery包装集和DOM对象
    CentOS 7 添加网卡后没有对应网卡配置文件解决方法
    openstack高可用集群搭建(集中式路由)(train版)
    5大富文本编辑器比较
    委托和事件:
  • 原文地址:https://www.cnblogs.com/maidol/p/3149208.html
Copyright © 2020-2023  润新知