vinodh muthusamy Ответов: 1

System. invalidoperationexception: коллекция была изменена; операция перечисления может не выполняться. At system.throwhelper.throwinvalidoperationexception(ресурс exceptionresource)


Я получаю эту ошибку, я не мог решить эту проблему, пожалуйста, помогите мне выйти из этой проблемы.
System.InvalidOperationException: Collection was modified; enumeration operation may not execute.
   at System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource)
   at System.Collections.Generic.List`1.Enumerator.MoveNextRare()


<pre>  List<string> AppList = new List<string>();

  public void loadApplicationDetail()
{
AppList.Clear();
                var Selectlistapp = Dbl.ReturnDataset("select Address,Aort from tblor_Details");
                if (Selectlistapp.Tables[0].Rows.Count > 0)
                {
                    for (var i = 0; i < Selectlistapp.Tables[0].Rows.Count; i++)
                    {
                        string Address = Selectlistapp.Tables[0].Rows[i]["Address"].ToString();
                        string Aort = Selectlistapp.Tables[0].Rows[i]["Aort"].ToString();
                        AppList.Add("http://" + Address + ":" + Aort + "/");
                    }
                    foreach (var app in AppList) //Error throws here in log file
                    {
                        bool sappvalue;
                        ApplicationMonitorScript appmonitor = new ApplicationMonitorScript();

                        sappvalue = appmonitor.UrlIsValid(app);
                        if (sappvalue == false)
                        {
                            MessageBox.Show("Stopped");
                        }
                        else
                        {
                             MessageBox.Show("start");
                        }
                    }
                }

}




Что я уже пробовал:

List<string> AppList = new List<string>()

  public void loadApplicationDetail()
{
AppList.Clear();
                var Selectlistapp = Dbl.ReturnDataset("select Address,Aort from tblor_Details");
                if (Selectlistapp.Tables[0].Rows.Count > 0)
                {
                    for (var i = 0; i < Selectlistapp.Tables[0].Rows.Count; i++)
                    {
                        string Address = Selectlistapp.Tables[0].Rows[i]["Address"].ToString();
                        string Aort = Selectlistapp.Tables[0].Rows[i]["Aort"].ToString();
                        AppList.Add("http://" + Address + ":" + Aort + "/");
                    }
                    foreach (var app in AppList) //Error throws here in log file
                    {
                        bool sappvalue;
                        ApplicationMonitorScript appmonitor = new ApplicationMonitorScript();

                        sappvalue = appmonitor.UrlIsValid(app);
                        if (sappvalue == false)
                        {
                            MessageBox.Show("Stopped");
                        }
                        else
                        {
                             MessageBox.Show("start");
                        }
                    }
                }

}

CHill60

Обычно это означает, что вы удалили или добавили список, находясь в цикле foreach или for. Я не могу увидеть, где вы делаете это, хотя.

1 Ответов

Рейтинг:
2

OriginalGriff

Вы не можете изменить цель foreach цикл внутри цикла: если вы это сделаете, то ошибка будет выдана, когда цикл попытается принять следующее значение.
Код, который вы показываете, напрямую не изменяет AppList, но, похоже, это переменная уровня класса.
Таким образом, есть три способа, которыми это может произойти:
1) конструктор ApplicationMonitorScript изменяет список.
2)ApplicationMonitorScript.Способ UrlIsValid является изменение списка
3) есть еще один поток, который изменяет список или также использует его перечислители.

Начните с простых, и если они, кажется, ничего не делают, начните смотреть на другие ваши темы.