-1

我有下面的代码。我正在尝试删除记录,并且在删除记录时抛出异常。“集合已修改;枚举操作可能无法执行。”

关于如何摆脱消息的任何想法。珍惜你的时间。

//validClaimControlNo has valid ClaimControl Numbers.
List<string> validClaimControlNo = new List<string>();

int count = 0;
foreach (List<Field> f in records)
{
    foreach (Field fe in f)
    {
        if (i == 0)
            if (!(validClaimControlNo.Contains(fe.Value)))
            {
                //if this claim is not in the Valid list, Remove that Record
                records.RemoveAt(count);
            }
        i++;
    }
    i = 0;
    count++;
}
4

3 回答 3

4

您不能从正在迭代的集合中删除项目。添加.ToList()将创建一个新列表,从而使其工作。

 foreach (List<Field> f in records.ToList())

另一种方法是向后迭代集合(并且您不需要额外的列表):

for(int i = records.Count - 1; i >= 0; i--)
{
   var f = records[i];

但是查看您的代码可以大大简化:

//Put the claim numbers into a set for fast lookup
var set = new HashSet<string>(validClaimControlNo);

//Remove undesired items
records.RemoveAll(f => f.Count > 0 && !set.Contains(f[0].Value));
于 2012-10-04T21:18:39.577 回答
2

将您更改foreach为:

foreach (List<Field> f in records.ToList())

于 2012-10-04T21:18:22.813 回答
1

向后迭代你的集合是最快的方法。

for (int i = records.Count - 1; i >= 0; i--) { ... }
于 2012-10-04T22:07:15.000 回答