收集被修改;枚举操作可能无法执行(在单独的集合中)

时间:2017-07-10 11:50:49

标签: c# collections

所以我一直在努力解决这个问题,我无法从逻辑上看到为什么会抛出这个特殊错误,因为我正在修改一个不属于枚举的不同集合。

下面是我的代码

var ResultsDict = cache["ResultsDictionary"] as Dictionary<string, ContentModel>;

var Resultscopy = ResultsDict.ToDictionary(x => x.Key, x => x.Value);
var ResultsList = new List<ContentModel>();

foreach (var Result in ResultsDict.ToList())
{
    foreach (var link in Result.Value.LinksOnNode)
    {
        if (ResultsDict.ContainsKey(link))
        {
            Resultscopy[Result.Key].LinksOnNode.Remove(link);
        }
    }
}

尝试删除&#39; link&#39;时会抛出异常在if语句中。但我不明白为什么。 ResultsCopy应该是foreach循环枚举的ResultsDict集合中一个完全独立的集合。

有人可以向我解释一下我错过了什么吗?这里似乎有一些基本的东西,我不太了解。

我已经完成了几个帖子并尝试了他们的解决方案,但似乎没有任何效果。我已经尝试了一切我能想到的创建ResultsDict的副本而不创建引用,但我仍然会收到此错误。

1 个答案:

答案 0 :(得分:2)

所以你要修改:

Resultscopy[Result.Key].LinksOnNode.Remove(link);

但是还要迭代“LinksOnNode”集合:

foreach (var link in Result.Value.LinksOnNode)

我认为其中一个集合“LinksOnNode”也在被迭代(请记住这些将是相同的)。

尝试将您的foreach更改为:

foreach (var link in Result.Value.LinksOnNode.ToArray())