我有一个通用字典dictionary <string, T>,我想基本上使克隆()..任何建议。
当前回答
这帮助了我,当我试图深度复制Dictionary < string, string >
Dictionary<string, string> dict2 = new Dictionary<string, string>(dict);
祝你好运
其他回答
对我来说最好的方法是:
Dictionary<int, int> copy= new Dictionary<int, int>(yourListOrDictionary);
这对我来说很好
// assuming this fills the List
List<Dictionary<string, string>> obj = this.getData();
List<Dictionary<string, string>> objCopy = new List<Dictionary<string, string>>(obj);
正如Tomer Wolberg在评论中所描述的,如果值类型是可变类,这是行不通的。
(注意:虽然克隆版本可能很有用,但对于简单的浅复制,我在另一篇文章中提到的构造函数是更好的选择。)
你希望拷贝的深度是多少,你使用的是什么版本的。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());
(这些方法未经测试,但应该有效。)
这帮助了我,当我试图深度复制Dictionary < string, string >
Dictionary<string, string> dict2 = new Dictionary<string, string>(dict);
祝你好运
好的,.NET 2.0的答案是:
如果不需要克隆值,可以使用构造函数重载to Dictionary,该构造函数接受一个现有的Dictionary。(也可以将比较器指定为现有字典的比较器。)
如果你确实需要克隆值,你可以使用这样的方法:
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()是一个适当的深度克隆。
推荐文章
- Linq-to-Entities Join vs GroupJoin
- 为什么字符串类型的默认值是null而不是空字符串?
- 在list中获取不同值的列表
- 组合框:向项目添加文本和值(无绑定源)
- 如何为ASP.net/C#应用程序配置文件值中的值添加&号
- 从System.Drawing.Bitmap中加载WPF BitmapImage
- 如何找出一个文件存在于c# / .NET?
- 为什么更快地检查字典是否包含键,而不是捕捉异常,以防它不?
- [DataContract]的命名空间
- string. isnullorempty (string) vs. string. isnullowhitespace (string)
- 完全外部连接
- 在foreach循环中编辑字典值
- 如何在xml文档中引用泛型类和方法
- 使用System.IO.Compression在内存中创建ZIP存档
- 从HttpResponseMessage获取内容/消息