foreach是取只读的,在取的时候数据不能变(包括修改,删除,添加等)。要避免这个问题,就应该使用for循环。

以前没有考虑过对collection类型对象操作时for 和foreach的区别,总感觉foreach更方便一些。今天写了个foreach循环来遍历一个list,之后在foreach体内又对其添加,表面上逻辑和写法看着没错,但在运行时出现异常:查询集合修改;可能无法执行枚举操作。查了一下,这个是使用foreach的典型的问题。

附错误demo代码:

 try
            {
                List<string> lsts = new List<string>();
                lsts.Add("1");
                lsts.Add("2");
                lsts.Add("3");
                lsts.Add("4");
                lsts.Add("2");
                lsts.Add("6");
                lsts.Add("1");
                lsts.Add("8");
                lsts.Add("9");
                lsts.Add("10");
                int count = 0;
                int countreus = 0;
                List<string> lstresult = new List<string>();
                foreach (string a in lsts)
                {
                    count++;
                    if (count == 1)
                    {
                        lstresult.Add(a);
                    }
                    else
                    {
                        if (count == lsts.Count)
                        {
                            count = 0;
                        }
                        else
                        {
                            foreach (string b in lstresult)
                            {
                                countreus++;
                                if (b.Contains(a.Trim()))
                                {
                                    break;
                                }
                                else
                                {
                                    if (countreus == lstresult.Count)
                                    {
                                        lstresult.Add(a);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw; 
            }

最后抛出异常:集合已修改;可能无法执行枚举操作。

正确代码如下:

 try
            {
                List<string> lsts = new List<string>();
                lsts.Add("1");
                lsts.Add("2");
                lsts.Add("3");
                lsts.Add("4");
                lsts.Add("2");
                lsts.Add("6");
                lsts.Add("1");
                lsts.Add("8");
                lsts.Add("9");
                lsts.Add("10");
                int count = 0;
                int countreus = 0;
                List<string> lstresult = new List<string>();
                foreach (string a in lsts)
                {
                    count++;
                    if (count == 1)
                    {
                        lstresult.Add(a);
                    }
                    else
                    {
                        if (count == lsts.Count)
                        {
                            count = 0;
                        }
                        else
                        {
                            for (int i = 0; i < lstresult.Count; i++)
                            {

                                countreus++;
                                if (lstresult[i].Contains(a.Trim()))
                                {
                                    break;
                                }
                                else
                                {
                                    if (countreus == lstresult.Count)
                                    {
                                        lstresult.Add(a);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw; 
            }

 

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-19
  • 2022-01-16
  • 2022-12-23
猜你喜欢
  • 2021-09-24
  • 2021-11-22
  • 2021-08-21
相关资源
相似解决方案