Запутался в логике, помогите разобраться. C# код

allcorrect

Client
Регистрация
15.03.2015
Сообщения
105
Благодарностей
38
Баллы
28
Всем привет, прошу помощи в поиске причины ошибки.
Написал код под задачу удаление постов со стены группы Vk.com в которых присутствуют дохлые ссылки, но шаблон останавливается и выскакивает ошибка:
Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции.
Имя параметра: index
Шаблон выполняет все действия до момента закрытия поста и соответственно удаления.
Вот сам код:
// Объявляем переменную отвечающую за список ссылок на редактирование
var LinkList = project.Lists["LinkList"];

//Создаём коллекцию из записей с возможностью редактирования + кладём это количество в переменную EditCount
var PostEditCollection = instance.ActiveTab.FindElementsByAttribute("div", "class","post_edit_button", "regexp");
//var EditCount = PostEditCollection.Count;


// Создаём цикл обработки ссылок
for (int l = 0; l<= PostEditCollection.Count; l++)
{
// Очищаем список ссылок для обработки
project.Lists["LinkList"].Clear();

// Нажимаем на кнопку редактирования поста
var EditButton = PostEditCollection.GetByNumber(l);
EditButton.Click();
System.Threading.Thread.Sleep(1000); // пауза

// Находим поле с текстом для редактирования
var GetText = instance.ActiveTab.FindElementByAttribute("div", "id", "wpe_text", "regexp", 0);

// Берём текст для редактирования
var InnerText = GetText.GetAttribute("innertext");
//return InnerText;
// Вытягиваем регулярками все ссылки в посте + перекладываем их в массив
var matches = Regex.Matches(InnerText, @"(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&amp;:/~\+#]*[\w\-\@?^=%&amp;/~\+#])?").Cast<Match>().Select(m => m.Value).ToArray();
// Перекладываем данные из массива в список
LinkList.AddRange(matches);
//return LinkList.Count;

////////////////////////// производим обработку взятых линков /////////////////////////////////
for (int a = 0; a <= LinkList.Count; a++ )
{

// Берём ссылку под индексом (а)
var LinkForEdit = LinkList[a];
//return LinkForEdit;
// Производим Get запрос по этой ссылке
var GetAliForRealLink = ZennoPoster.HttpGet(LinkForEdit, String.Empty, "UTF-8", ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.HeaderOnly);
var response = Regex.Matches(GetAliForRealLink, @"HTTP/.*").Cast<Match>().Select(m => m.Value).ToArray();
project.Variables["Parsresponse"].Value = string.Join("; ", response);
//return project.Variables["Parsresponse"].Value;
}
if (project.Variables["Parsresponse"].Value.Contains("404 Not Found"))
{

//Закрываем пост
var CloseButton = instance.ActiveTab.FindElementByAttribute("button", "innertext", "Сохранить", "regexp", 0);
CloseButton.Click();
// Жмём на удаление поста
var PostDelit = instance.ActiveTab.FindElementByAttribute("div", "class", "post_delete_button", "regexp", l);
PostDelit.Click();
}
//Пересчитываем посты с возможностью редактирования
PostEditCollection = instance.ActiveTab.FindElementsByAttribute("div", "class","post_edit_button", "regexp");

}
Не могу додуматься, как сконструировать логику этого кода, может другой цикл, или ещё чего посоветуете?
 

Moadip

Client
Регистрация
26.09.2015
Сообщения
509
Благодарностей
823
Баллы
93
Код:
// Создаём цикл обработки ссылок
for (int l = 0; l<= PostEditCollection.Count; l++)
Тут затык. Count это количество элементов.

Например в коллекции их 10 штук.
Но индексация идет с 0. Последний элемент под номером 9.
У вас же последний проход по циклу берет значение из коллекции с индексом 10.

Из за этого и ошибка, нету в коллекции элемента с таким индексом.

Должно быть так, без знака =
Код:
// Создаём цикл обработки ссылок
for (int l = 0; l< PostEditCollection.Count; l++)
Или так
Код:
// Создаём цикл обработки ссылок
for (int l = 0; l<= PostEditCollection.Count-1; l++)
Аналогично и тут
Код:
////////////////////////// производим обработку взятых линков /////////////////////////////////
for (int a = 0; a <= LinkList.Count; a++ )
 
  • Спасибо
Реакции: allcorrect

allcorrect

Client
Регистрация
15.03.2015
Сообщения
105
Благодарностей
38
Баллы
28
Спасибо!
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)