3 回答
TA贡献1813条经验 获得超2个赞
好的,.NET 2.0回答:
如果您不需要克隆值,则可以使用构造函数重载到Dictionary,它接受现有的IDictionary。(您也可以将比较器指定为现有字典的比较器。)
如果确实需要克隆值,可以使用以下内容:
public static Dictionary<TKey, TValue> CloneDictionaryCloningValues<TKey, TValue>
(Dictionary<TKey, TValue> original) where TValue : ICloneable
{
Dictionary<TKey, TValue> ret = new Dictionary<TKey, TValue>(original.Count,
original.Comparer);
foreach (KeyValuePair<TKey, TValue> entry in original)
{
ret.Add(entry.Key, (TValue) entry.Value.Clone());
}
return ret;
}
当然,这也依赖于TValue.Clone()适当的深度克隆。
TA贡献1798条经验 获得超7个赞
您希望副本有多深,以及您使用的是什么版本的.NET?我怀疑如果您使用的是.NET 3.5,那么对ToDictionary进行LINQ调用(同时指定键和元素选择器)将是最简单的方法。
例如,如果您不介意该值是浅层克隆:
var newDictionary = oldDictionary.ToDictionary(entry => entry.Key,
entry => entry.Value);
如果您已经限制T实现ICloneable:
var newDictionary = oldDictionary.ToDictionary(entry => entry.Key,
entry => (T) entry.Value.Clone());
(这些是未经测试的,但应该有效。)
TA贡献1796条经验 获得超4个赞
Dictionary<string, int> dictionary = new Dictionary<string, int>();
Dictionary<string, int> copy = new Dictionary<string, int>(dictionary);
- 3 回答
- 0 关注
- 733 浏览
添加回答
举报