我需要在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“类型或从中派生”
不完全确定这意味着什么......是否有其他方法可以浅层复制字典/修复上面的代码?
答案 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);