c#将一个Dictionary复制到另一个Dictionary,只要复制值,不要复制地址,
我用等号直接Dictionary1=Dictionary2,复制过去的貌似是地址,我就是想把值复制过去请问怎么实现,不要遍历一个一个复制,我做复制就是为了遍历,因为有个字...
我用等号直接Dictionary1=Dictionary2,复制过去的貌似是地址,我就是想把值复制过去 请问怎么实现,不要遍历一个一个复制,我做复制就是为了遍历,因为有个字典是动态的不能用foreach遍历
展开
3个回答
展开全部
static void Main(string[] args)
{
Dictionary<string, int> d1 = new Dictionary<string, int>();
d1.Add("A", 1);
d1.Add("B", 2);
//使用构造函数可以实现不用for循环复制
Dictionary<string, int> d2 = new Dictionary<string, int>(d1);
d2["B"] = 22;//改变d2只影响到d2
foreach (var kv in d2)
Console.WriteLine("k={0} v={1}", kv.Key, kv.Value);
foreach (var kv in d1)
Console.WriteLine("k={0} v={1}", kv.Key, kv.Value);
Console.ReadLine();
}
追问
Dictionary d2 = new Dictionary(d1);
执行这句的时候,如果恰巧d1(d1的值在另一线程会5s变一次)的值变换,程序还是会报错。
这个问题可以解决吗?麻烦帮看一下 谢谢了
追答
多线程要先lock住啊!另外.net有专门用于多线程的字典
ConcurrentDictionary(TKey, TValue) Class
http://msdn.microsoft.com/en-us/library/dd287191(v=vs.110).aspx
引用阳光的雷咩咩的回答:
static void Main(string[] args) { Dictionary<string, int> d1 = new Dictionary<string, int>(); d1.Add("A", 1); d1.Add("B", 2); //使用构造函数可以实现不用for循环复制 Dictionary<string, int> d2 = new Dictionary<string, int>(d1); d2["B"] = 22;//改变d2只影响到d2 foreach (var kv in d2) Console.WriteLine("k={0} v={1}", kv.Key, kv.Value); foreach (var kv in d1) Console.WriteLine("k={0} v={1}", kv.Key, kv.Value); Console.ReadLine(); }
static void Main(string[] args) { Dictionary<string, int> d1 = new Dictionary<string, int>(); d1.Add("A", 1); d1.Add("B", 2); //使用构造函数可以实现不用for循环复制 Dictionary<string, int> d2 = new Dictionary<string, int>(d1); d2["B"] = 22;//改变d2只影响到d2 foreach (var kv in d2) Console.WriteLine("k={0} v={1}", kv.Key, kv.Value); foreach (var kv in d1) Console.WriteLine("k={0} v={1}", kv.Key, kv.Value); Console.ReadLine(); }
展开全部
这里有一个问题,如果Dictionary的Value是一个引用类型照样在构造函数中传参其实复制的还是地址。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询