c#将一个Dictionary复制到另一个Dictionary,只要复制值,不要复制地址,

我用等号直接Dictionary1=Dictionary2,复制过去的貌似是地址,我就是想把值复制过去请问怎么实现,不要遍历一个一个复制,我做复制就是为了遍历,因为有个字... 我用等号直接Dictionary1=Dictionary2,复制过去的貌似是地址,我就是想把值复制过去 请问怎么实现,不要遍历一个一个复制,我做复制就是为了遍历,因为有个字典是动态的不能用foreach遍历 展开
 我来答
阳光的雷咩咩
2014-11-03 · TA获得超过1.4万个赞
知道大有可为答主
回答量:2.3万
采纳率:66%
帮助的人:7801万
展开全部
        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
ft26748501
2018-03-26
知道答主
回答量:3
采纳率:100%
帮助的人:2551
引用阳光的雷咩咩的回答:
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是一个引用类型照样在构造函数中传参其实复制的还是地址。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友ad802a1
2014-11-03 · 超过39用户采纳过TA的回答
知道小有建树答主
回答量:78
采纳率:0%
帮助的人:50.9万
展开全部

Dictionary<string, string> dic1 = new Dictionary<string, string>();

            Dictionary<string, string> dic2 = new Dictionary<string, string>();

            dic1.Add("A", "1");

            dic1.Add("B", "2");

            dic1.Add("C", "3");

            dic2 = dic1;

            foreach (var dic in dic2)

            {

                Console.WriteLine(dic);

            }

            Console.Read();

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式