foreach (EventAlarm ea in eventList)
            {                if (ea.EventStatus == 2)
                {                    Console.WriteLine("添加");
                    StringBuilder sbSql = new StringBuilder();
                    sbSql.Append("INSERT INTO trafficevent VALUES (default,");
                    sbSql.Append(ea.DetId);
                    sbSql.Append(",");
                    sbSql.Append(ea.ZoneId);
                    sbSql.Append(",");
                    sbSql.Append(ea.EventType);
                    sbSql.Append(",'");
                    sbSql.Append(ea.Timestamp);
                    sbSql.Append("',");
                    sbSql.Append(ea.ELevel);
                    sbSql.Append(",'");
                    sbSql.Append(ea.ImageName);
                    sbSql.Append("','");
                    sbSql.Append(ea.VideoName);
                    sbSql.Append("','");
                    sbSql.Append(ea.EActive.ToString());
                    sbSql.Append("',");
                    sbSql.Append(ea.EventStatus);
                    sbSql.Append(")");
                    Console.WriteLine("sbSql" + sbSql);
                    bool tf = save(sbSql.ToString());                    //保存成功才删除
                    if (tf == true)
                    {
                        eventList.Remove(ea);
                    }
                }
            }for (int i = 0; i < eventList.Count;i++)
            {
                EventAlarm ea = eventList[i];                if (ea.EventStatus == 2)
                {                    Console.WriteLine("添加");
                    StringBuilder sbSql = new StringBuilder();
                    sbSql.Append("INSERT INTO trafficevent VALUES (default,");
                    sbSql.Append(ea.DetId);
                    sbSql.Append(",");
                    sbSql.Append(ea.ZoneId);
                    sbSql.Append(",");
                    sbSql.Append(ea.EventType);
                    sbSql.Append(",'");
                    sbSql.Append(ea.Timestamp);
                    sbSql.Append("',");
                    sbSql.Append(ea.ELevel);
                    sbSql.Append(",'");
                    sbSql.Append(ea.ImageName);
                    sbSql.Append("','");
                    sbSql.Append(ea.VideoName);
                    sbSql.Append("','");
                    sbSql.Append(ea.EActive.ToString());
                    sbSql.Append("',");
                    sbSql.Append(ea.EventStatus);
                    sbSql.Append(")");
                    Console.WriteLine("sbSql" + sbSql);
                    bool tf = save(sbSql.ToString());                    //保存成功才删除
                    if (tf == true)
                    {
                        //eventList.Remove(ea);
                        eventList.RemoveAt(i);
                    }
                }
            }
大家看到了2段代码似乎一样,但是呢运行之后有一个会报错就是第一段代码:
System.InvalidOperationException中第一次偶然出现的“mscorlib.dll”类型的异常这个异常但是呢第二个不会有这个异常我不明白那里不对....

解决方案 »

  1.   

    foreach对象,不能删除
    可以先记录下来,最后一次性删除
      

  2.   

    List <String> list = new List <string> {"a","b","c" };              
    listStr.Remove(list[0]);              
    listStr.RemoveAt(1); 
    foreach是只读的访问,被foreach循环访问的集合是不允许修改的。
      

  3.   


    哦这样啊学习了我在这个循环之上还有一个循环这个循环做了修改,这个没有问题啊?你说的只读?            foreach (EventAlarm ea in eventList)
                {
                    string imgFile = "";
                    if (ea.Timestamp == WATTS1.Timestamp.ToString() && ea.DetId == WATTS1.DetectorId && ea.ZoneId == WATTS1.eDetectorZone)
                    {
                        WATTS1.ImageFile(ref imgFile);                    if (imgFile.Substring(0, 2) == "WI")
                        {
                            ea.VideoName = imgFile;
                            ea.EventStatus = 2;
                        }
                        else if (imgFile.Substring(0, 2) == "PW")
                        {
                            ea.ImageName = imgFile;
                            ea.EventStatus = 1;
                        }
                    }
                }