class a
    {
        public int m=0;
    }                     a c1 = new a();
            List<a> list = new List<a>();
            list.Add(c1);
            c1 = new a();
            list.Add(c1);           
            c1.m = 3;现在list中有两个值 0 3
List的插入是复制后插入,那为什么c1还可以修改已经插入到list中的元素的值呢?

解决方案 »

  1.   

    但是插入的是c1复制后的一个元素啊
    例如c1应用的a  地址01
    因为要插入(Add)  复制a到地址02  再将02地址的a插入到list
      

  2.   

                a c1 = new a(); 
                List <a> list = new List <a>();             list.Add(c1); 
                c1 = new a();  // 此时 c1 指向了新的对象,所以:
                  c1.m = 2;      // 对 c1 的修改并不能影响已经添加到 List 中的元素            list.Add(c1);  // 又增加一个元素到 List 中        
                c1.m = 3;      // 对 c1 修改会反映到 List 的元素中
                  c1 = new a();  // 此时 c1 指向了新的对象,如果这之后再对 c1 的修改,并不能影响已经添加到 List 中的元素
               
      

  3.   

    list只是返回引用类型值的副本,所以当你改变 c1时list返回的值也会变
      

  4.   

    List的插入是复制后插入,首先这句话是不对的啊,怎么会复制呢,只是让list[index]指向了你插入的对象啊