2015-12-21 3 views
1

У меня есть List<IGrouping<string, InvoiceCount>>, чтобы проверять позиции в счете-фактуре. Он отлично работает, но когда позиция уже находится в другом счете, позиция должна быть удалена, но придет исключение.Коллекция была изменена IGrouping of Invoices

«Коллекция была изменена, операция перечисления не может выполняться».

, и я понятия не имею, чтобы решить эту

private static void ValidateInvoices(List<IGrouping<string, InvoiceCount>> invo) 
     { 
      var validationErrors = new StringBuilder(); 
      foreach (IGrouping<string, InvoiceCount> invoice in invo) 
      { 
       for (var line = 1; line < invoice.Count(); line++) 
       { 
        if (!invoice.ElementAt(line).IsInSameInvoice(invoice.First())) 
        { 
         validationErrors.Append("Validation error in Invoice" + invoice.Key + " in line " + (line + 1) + Environment.NewLine); 
         if (invo.Contains(invoice)) 
          try 
          { 
           invo.Remove(invoice); 
          } 
          catch (Exception ex) 
          { 
           throw ex; 
          } 
        } 
       } 
      } 
      if (validationErrors.Length > 0) 
       throw new Exception(validationErrors.ToString()); 
     } 
+4

Возможный дубликат [Коллекция была изменена; операция перечисления не может выполняться] (http://stackoverflow.com/questions/604831/collection-was-modified-enumeration-operation-may-not-execute) –

+3

Возможный дубликат [C# Collection был изменен; операция перечисления не может выполняться] (http://stackoverflow.com/questions/2024179/c-sharp-collection-was-modified-enumeration-operation-may-not-execute) – BhushanK

ответ

2

Вам нужно обновить коллекцию после удаления элемента. Попробуйте изменить свой код, как показано ниже, и посмотреть, если он работает:

Код:

var newList = invo; 
foreach (IGrouping<string, InvoiceCount> invoice in invo) 
{ 
     for (var line = 1; line < invoice.Count(); line++)     
     { 
      if (YOUR CONDITION HERE) 
      { 
       newList.Remove(invoice); 
       invo= newList; 
      } 
     } 
} 

Примечание:How to modify a collection during iteration

Смежные вопросы