C#浅拷贝词典?

Geo*_*sen 22 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();
Run Code Online (Sandbox Code Playgroud)

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

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

Jar*_*Par 44

为了得到一个浅拷贝,只是使用的构造Dictionary<TKey, TValue>,因为它需要的IEnumerable<KeyValuePair<TKey, TValue>>.它会将此集合添加到新实例中.

Dictionary<int, int> flagsn = new Dictionary<int, int>(flags);
Run Code Online (Sandbox Code Playgroud)

  • @Georges没问题.很高兴帮忙 (2认同)

gat*_*ich 10

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

var ShallowCopy = OriginalDictionary.ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
Run Code Online (Sandbox Code Playgroud)

  • 您需要为System.Linq添加一条using语句,以访问ToDictionary()扩展方法。 (2认同)