zoukankan      html  css  js  c++  java
  • 错误记录--关于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-修改代码
  • 相关阅读:
    使用 PHPMailer 发邮件
    安装phpssdb扩展:
    CI安全
    CI调试应用程序
    Sphinx的GEO距离搜索 [转载]
    Lua开发环境搭建(Mac OS X)
    MySQL 的索引和最左前缀原则
    PHP解码Json(json_decode)字符串返回NULL的原因及解决方法(转载)
    PHP连接MySQL报错"No such file or directory"的解决办法
    web 性能优化指南阅读笔记
  • 原文地址:https://www.cnblogs.com/maidol/p/3149208.html
Copyright © 2011-2022 走看看