我有這樣的代碼,它是給我集合被修改,並且可以不再一一列舉,但我並沒有改變值:收藏已修改;枚舉操作可能不會執行
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
它會給我那個錯誤,但參數正在改變。
你確定'DCache [words]'沒有返回'dWords'引用的*相同*字典嗎?換句話說,即使你有兩個變量,也許你只有一個字典。 – 2013-05-04 16:41:34
在'foreach'循環之前,執行此代碼並告訴我結果:'var same = Object.ReferenceEquals(_dwordCache,dWords);' – 2013-05-04 16:41:58
此行if(DCache.ContainsKey(words))是一個清除信號。我想你是從緩存中獲得相同的字典 – Steve 2013-05-04 16:43:38