C# 在对发票进行分组时修改了收款

C# 在对发票进行分组时修改了收款,c#,C#,我有一个列表来检查发票中的位置。它工作得很好,但当一个职位已经在另一张发票中时,该职位应该被删除,但会出现例外 “集合已修改;枚举操作可能无法执行。” 我不知道如何解决这个问题 private static void ValidateInvoices(List<IGrouping<string, InvoiceCount>> invo) { var validationErrors = new StringBuilder();

我有一个
列表
来检查发票中的位置。它工作得很好,但当一个职位已经在另一张发票中时,该职位应该被删除,但会出现例外

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

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

 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());
        }
private static void ValidateInvoices(列表发票)
{
var validationErrors=新的StringBuilder();
foreach(在发票中分组发票)
{
对于(变量行=1;行0)
抛出新异常(validationErrors.ToString());
}

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

代码:

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;
           }
       }
}
var newList=invo;
foreach(在发票中分组发票)
{
对于(变量行=1;行

注意:

可能的重复