我尝试在循环时删除一行时出现以下错误.
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并且可能会引入非常微妙的错误,简单地禁止它是更安全的它.
| 归档时间: |
|
| 查看次数: |
6181 次 |
| 最近记录: |