У меня есть реализация, когда мне нужно перебирать коллекцию документов и на основе определенного условия объединять документы.Как объединить элементы в списке <> коллекции C#
Условие слияния очень просто, если документ doctype этого документа аналогичен документу документа документа, а затем скопируйте все страницы из более позднего типа и добавьте его на страницы настоящего документа и удалите из коллекции более поздний документ. Примечание: Оба response.documents
и response.documents[].pages
- это список <> коллекции.
Я пытался это сделать, но получал следующее исключение. Как только я удаляю документ.
коллекция была изменена нумерация не может выполнить
Вот код:
int docindex = 0;
foreach(var document in response.documents)
{
string presentDoctype = string.Empty;
string laterDoctype = string.Empty;
presentDoctype = response.documents[docindex].doctype;
laterDoctype = response.documents[docindex + 1].doctype;
if (laterDoctype == presentDoctype)
{
response.documents[docindex].pages.AddRange(response.documents[docindex + 1].pages);
response.documents.RemoveAt(docindex + 1);
}
docindex = docindex + 1;
}
Ex:
reponse.documents[0].doctype = "BankStatement" //page count = 1
reponse.documents[1].doctype = "BankStatement" //page count = 2
reponse.documents[2].doctype = "BankStatement" //page count = 2
reponse.documents[3].doctype = "BankStatement" //page count = 1
reponse.documents[4].doctype = "BankStatement" //page count = 4
Ожидаемый результат:
response.documents[0].doctype = "BankStatement" //page count = 10
Пожалуйста, предлагайте. Помогите с вашей помощью.
Вы получаете ошибку перечисления, потому что вы меняете коллекцию, поэтому счетчик становится недействительным. Используйте простой цикл for вместо foreach. – ViRuSTriNiTy
Я предлагаю сначала выполнить поиск сообщения об ошибке - т.е. https://www.bing.com/search?q=C%23+collection+was+modified+enumeration+may+not+execute, что должно дать вам хорошие объяснение проблемы для многих основных исключений .Net. Это также позволило бы вам улучшить свой вопрос с объяснением, почему стандартные подходы не сработали для вас (т. Е. Использовать 'for' с тщательной индексацией вместо' foreach'). –