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-修改代码
  • 相关阅读:
    2020.04.11【NOIP普及组】模拟赛C组25总结
    【华为云技术分享】云图说 | 容器交付流水线ContainerOps,提升持续交付效率
    【USACO 2020 January Silver】Wormhole Sort 题解
    【华为云技术分享】计算python程序执行时间
    HTAP会成为数据库的未来吗?
    【华为云技术分享】现代富文本编辑器Quill的模块化机制
    Cow Evolution 题解
    【USACO 2020 January Silver】Loan Repayment
    VS2012 黑色护眼主题
    常用的正则表达式
  • 原文地址:https://www.cnblogs.com/maidol/p/3149208.html
Copyright © 2011-2022 走看看