static void Main(string[] args)
        {            Dictionary<int, string> dic = new Dictionary<int, string>();
            Dictionary<int, string> dic2 = new Dictionary<int, string>();
            dic.Add(1, "HaHa");
            dic.Add(5, "HoHo");
            dic.Add(3, "HeHe");
            dic.Add(2, "HiHi");
            dic.Add(4, "HuHu");
            dic2 = dic;   //已经声明dic2 = dic
            dic.Clear();  //dic清空,不会影响到dic2吧
            foreach (var pair in dic2)            
            {
                Console.WriteLine("Key:{0}, Value:{1}", pair.Key, pair.Value);   
            }
           
            Console.ReadKey();
        } 问题:dic清空,是在dic2 = dic之后执行的,应该不会影响到dic2吧,结果dic2怎么会空了呢?

解决方案 »

  1.   

    因为dic2 是引用类型(class),它只是dic的一个引用,并没有复制dic的值。这样可以复制内容            Dictionary<int, string> dic = new Dictionary<int, string>();
                dic.Add(1, "HaHa");
                dic.Add(5, "HoHo");
                dic.Add(3, "HeHe");
                dic.Add(2, "HiHi");
                dic.Add(4, "HuHu");
                Dictionary<int, string> dic2 = new Dictionary<int, string>(dic);
                dic.Clear(); //dic清空,不会影响到dic2吧
                foreach (var pair in dic2)
                {
                    Console.WriteLine("Key:{0}, Value:{1}", pair.Key, pair.Value);
                }