不修改循环中的列表但修改了抛出错误集合; 枚举操作可能无法执行

rah*_*rma 0 c# generics

我在c#中使用以下代码,如下所示.

var result = (from o in db.tblOrderMasters
              join od in db.tblOrderDetails on o.order_id equals od.orderdetails_orderId
              join c in db.tblCountryMasters on o.order_dCountry equals c.country_id
              join cu in db.tblCustomers on o.order_Custid equals cu.cust_id
              where o.order_id == orderid && o.order_active == true && o.order_IsDeleted == false && (o.order_status == 2)
              select new
              {
                 Code = o.order_code,
                 Name = o.order_dFirstName + " " + o.order_dLastName,
                 Quantity = od.Quantity,
                 [...snip...]
              }).ToList();

var Qresult =  result;
try
{
    foreach (var r in result)
    {
         if (r.Quantity > 1)
         {
             for (int i = 1; i < r.Quantity; i++)
             {
                  Qresult.Add(r);
             }
         }
    }
}
Run Code Online (Sandbox Code Playgroud)

收集被修改; 枚举操作可能无法执行.

当我读到与此错误相关的其他答案时,他们说你不能在迭代时修改列表,但是在我的代码中我没有修改result列表而是我正在更改一个新列表,Qresult并且迭代主要result list因此为什么这个错误来了 ?

还有一件事我想在这里提一下,当我使用时,quickwatch 我可以看到结果项中也添加了这一行

  Qresult.Add(r);
Run Code Online (Sandbox Code Playgroud)

但我正在添加项目,Qresult所以为什么项目添加到result

Tig*_*ran 8

你写 :

var Qresult =  result;

foreach (var r in result) //result is Qresult
{ 
   .. 
   Qresult.Add(r);

}
Run Code Online (Sandbox Code Playgroud)

就像写一样:

foreach (var r in Qresult) 
{ 
   .. 
   Qresult.Add(r);

}
Run Code Online (Sandbox Code Playgroud)

所以你改变了实际的集合