【问题标题】:Collection was modified IGrouping of Invoices集合已修改 IGrouping of Invoices
【发布时间】:2015-12-21 06:36:15
【问题描述】:

我有一个List<IGrouping<string, InvoiceCount>> 来检查发票中的位置。它工作得很好,但是当一个职位已经在另一个发票中时,应该删除该职位,但它会出现异常

“集合已修改;枚举操作可能无法执行。”

我不知道如何解决这个问题

 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());
        }

【问题讨论】:

标签: c#


【解决方案1】:

删除元素后需要刷新集合。 尝试更改您的代码,如下所示,看看它是否有效:

代码:

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

【讨论】:

    猜你喜欢
    • 2010-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-11
    • 1970-01-01
    • 2011-08-11
    • 2011-09-12
    • 2011-10-07
    相关资源
    最近更新 更多