数组的copyto方法应该是一个浅拷贝,也就是说当我数组的值是引用类型的时候,复制的是地址。
    class Program
    {
        static void Main(string[] args)
        {
            Student zhangsan = new Student();
            zhangsan.name = "zhangsan";
            zhangsan.age = 22;
            Student lisi = new Student();
            lisi.name = "Lisi";
            lisi.age = 23;
            Student wangwu = new Student();
            wangwu.name = "Wangwu";
            wangwu.age = 24;
            Student zhaoliu = new Student();
            zhaoliu.name = "ZhaoLiu";
            zhaoliu.age = 25;            Student [] oldArr=new Student[]{zhangsan,lisi,wangwu};
           Student [] newArr = new Student[oldArr.Length];
            oldArr.CopyTo(newArr,0);
            soldArr.SetValue(zhaoliu, 0);
            for (int i = 0; i < oldArr.Length;i++ )
            {
                Console.WriteLine(oldArr[i].name);
            }
            for (int i = 0; i < newArr.Length; i++)
            {
                Console.WriteLine(newArr[i].name);
            }
            Console.ReadKey();
        }
    }
    public class Student
    {
        public String name;
        public int age;    }为什么这段代码的输出代码的输出是
 zhaoliu
 lisi
wangwu
zhangsan
lisi
wangwu
既然是浅拷贝,那我的oldarr改变了,那么newarr只是一个引用地址,newarr的输出也应该是
zhaoliu
lisi
wangwu
请各位大侠赐教!

解决方案 »

  1.   

    需要去理解下string类的特殊性
      

  2.   


      Student[] oldArr = new Student[] { zhangsan, lisi, wangwu };
                Student[] newArr = new Student[oldArr.Length];
               
                Array.Copy(oldArr,newArr,3);
                oldArr.SetValue(zhaoliu, 0);
      

  3.   


     Student[] oldArr = new Student[] { zhangsan, lisi, wangwu };
                Student[] newArr = new Student[oldArr.Length];
                newArr = oldArr;
                //Array.Copy(oldArr,newArr,3);
                oldArr.SetValue(zhaoliu, 0);
      

  4.   

    我知道=赋值肯定是可以的,我现在就是想知道COPYTO这个方法,说明的是浅拷贝,那么为什么我改变oldArr的元素,newArr没有改变呢
      

  5.   

    http://www.cnblogs.com/frank_xl/archive/2009/02/24/1396903.html
    自己去看吧,没事google下
      

  6.   

    那你理解什么是浅拷贝吗?
    对象浅拷贝,只是复制本身,它包含的对象只是复制引用你可以上msdn上看看浅拷贝的定义而你的Copyto就是浅拷贝
    还有就是你可以看看这个帖子上是怎么表述的
    http://topic.csdn.net/t/20060512/01/4745869.html
    但愿对你有帮助
      

  7.   

    大致明白了,也就是说浅拷贝的时候我newArr中的Student类zhangsan跟oldArr中的Student类zhangsan是指的同一个对象,如果是深拷贝的话 那么他们就是不同的对象了?