-
慕姐8265434
好的,.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()适当的深度克隆。
-
元芳怎么了
您希望副本有多深,以及您使用的是什么版本的.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());(这些是未经测试的,但应该有效。)
-
SMILET
Dictionary<string, int> dictionary = new Dictionary<string, int>();Dictionary<string, int> copy = new Dictionary<string, int>(dictionary);