我有一个需要复制的字典,因为无法在foreach循环中更改字典。 (会导致错误"收集被修改;枚举操作可能无法执行") 在我学会了
之后dictTemp.Add(dict);
只会将一个词典引用到另一个词典。我试图复制它
foreach (KeyValuePair<string, int> entry in dict)
{
if (!dict.ContainsKey(entry.Key))
{
dictTemp.Add(entry.Key, entry.Value);
}
else
{
dictTemp[entry.Key] = entry.Value;
}
}
但是我得到了错误,所以我认为添加键和值只是一个参考。我查看了这个问题,并通过Clone(.Net 2.0)的深层复制找到了解决方案。 https://stackoverflow.com/a/139841/3772108
foreach (KeyValuePair<string, int> entry in dict)
{
if (!dict.ContainsKey(entry.Key))
{
dictTemp.Add(entry.Key, entry.Value.Clone());
}
else
{
dictTemp[entry.Key] = entry.Value;
}
}
但是在.Net 4.5中是不可能的,因为消息&#34;&#39; int&#39;不包含Clone的定义,也没有扩展方法Clone接受类型&#39; int&#39;的第一个参数。可以找到&#34;
现在是我在2017年的问题,怎样才能完全复制字典。 (没有引用它)或者有更智能/更好的方法吗?
答案 0 :(得分:3)
首先,您尝试克隆int而不是字典。您不需要克隆值类型,只需将它们分配给变量即可获得“克隆”。
您的foreach
- 循环也存在错误,请检查!dict.ContainsKey
而不是!dictTemp.ContainsKey
:
foreach (KeyValuePair<string, int> entry in dict)
{
if (!dictTemp.ContainsKey(entry.Key))
{
dictTemp.Add(entry.Key, entry.Value);
}
else
{
dictTemp[entry.Key] = entry.Value;
}
}
最后,您可以使用constructor获取“克隆”:
var dictTemp = new Dictionary<string, int>(dict);