C#int不包含Clone的定义

时间:2017-11-16 10:58:05

标签: c# dictionary

我有一个需要复制的字典,因为无法在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年的问题,怎样才能完全复制字典。 (没有引用它)或者有更智能/更好的方法吗?

1 个答案:

答案 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);