28

我需要在 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 typeSystem.Collections.Generic.Dictionary'。限定符必须是 `PointFlagger' 类型或派生自它”

不完全确定这意味着什么......有没有另一种方法来浅拷贝字典/修复我上面的代码?

4

2 回答 2

59

要获得浅拷贝,只需使用构造函数Dictionary<TKey, TValue>as 它需要一个IEnumerable<KeyValuePair<TKey, TValue>>. 它将将此集合添加到新实例中。

Dictionary<int, int> flagsn = new Dictionary<int, int>(flags);
于 2012-01-14T00:46:34.460 回答
10

这是我发现的一种通用方式,您不必显式编写任何类型,出于可维护性的原因,我更喜欢这种方式:

var ShallowCopy = OriginalDictionary.ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
于 2012-03-14T15:29:48.873 回答