在枚举时删除数据表中的行时出现问题

hik*_*ume 6 c# datatable

我尝试在循环时删除一行时出现以下错误.

C#:收藏被修改; 枚举操作可能无法执行

我已经做了一段时间的研究了,我在这里读了一些类似的帖子,但我还是找不到合适的答案.

foreach (DataTable table in JobsDS.Tables)
{

  foreach (DataRow row in table.Rows)
  {
    if (row["IP"].ToString() != null && row["IP"].ToString() != "cancelled")
    {
        string newWebServiceUrl = "http://" + row["IP"].ToString() + "/mp/Service.asmx";
        webService.Url = newWebServiceUrl;
        string polledMessage = webService.mpMethod(row["IP"].ToString(), row["ID"].ToString());

        if (polledMessage != null)
        {
            if (polledMessage == "stored")
            {               
                removeJob(id);
            }

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

}

任何帮助将不胜感激

Rex*_*x M 14

而不是使用foreach,使用反向for循环:

for(int i = table.Rows.Count - 1; i >= 0; i--)
{
    DataRow row = table.Rows[i];
    //do your stuff
}
Run Code Online (Sandbox Code Playgroud)

删除行确实会修改原始的行集合.如果大多数枚举器在枚举过程中检测到源序列发生了变化,那么它们就会被爆炸 - 而不是试图处理所有变化的奇怪的可能性,foreach并且可能会引入非常微妙的错误,简单地禁止它是更安全的它.