C#浅拷贝词典?

时间:2012-01-14 00:44:07

标签: c# dictionary shallow-copy

我需要在c#中浅层复制字典。

例如:

Dictionary<int,int> flags = new Dictionary<int,int>();
flags[1] = 2;
flags[2] = 3;
flags[0] = 9001;
Dictionary<int,int> flagsn = flags.MemberwiseClone();

不幸的是,它返回错误:“错误CS1540:无法访问受保护的成员object.MemberwiseClone()' via a qualifier of type System.Collections.Generic.Dictionary'。限定符必须是”PointFlagger“类型或从中派生”

不完全确定这意味着什么......是否有其他方法可以浅层复制字典/修复上面的代码?

2 个答案:

答案 0 :(得分:39)

要获得浅层副本,只需使用Dictionary<TKey, TValue>的构造函数,因为它需要IEnumerable<KeyValuePair<TKey, TValue>>。它会将此集合添加到新实例中。

Dictionary<int, int> flagsn = new Dictionary<int, int>(flags);

答案 1 :(得分:8)

这是我发现的一种通用方法,你不必显式写任何类型,我更喜欢这种类型的可维护性:

var ShallowCopy = OriginalDictionary.ToDictionary(kvp => kvp.Key, kvp => kvp.Value);