0

我有这段代码,它给我的集合已修改,无法再枚举,但我没有更改值:

public static void AddtoDictionary(string words, Dictionary<int, int> dWords)
{
    if (DCache.ContainsKey(words))
    {
        Dictionary<int, int> _dwordCache = DCache[words];

        //error right here
        foreach (int _key in _dwordCache.Keys)
        {
            int _value = _dwordCache[_key];

            if (dWords.ContainsKey(_key))
            {
                dWords[_key] = (dWords[_key] + _value);
            }
            else
            {
                dWords[_key] = _value;
            }
        }
    }
}

我正在改变dWords而不是改变_dwordCache。有两个字典。我可以理解,如果我改变_dwordCache它会给我那个错误,但参数正在改变。

4

2 回答 2

1

消除此错误的一种快速而肮脏的方法是转换为不同的列表:

foreach (int _key in _dwordCache.Keys.ToList())

确保你有“使用 System.Linq;” 在文件的顶部。

但是如果你有很大的列表,上面的建议可能会杀死你的程序,每次调用代码时,它都会一次又一次地创建另一个列表。

那么在这种情况下,您可能会远离枚举数。尝试将您的“foreach”替换为:

for (int i = 0; i < _dwordCache.Keys.Count; i++)
{
    var key = _dwordCache.ElementAt(i);
}
于 2013-05-04T20:22:41.373 回答
0

您确定在 foreach 运行时 DCache[words] 元素没有在其他地方修改吗?

于 2013-05-04T16:47:10.767 回答