List<string> a = new List<string>();
List<string> b = new List<string>();a.Add("1");
a.Add("2");b = a;b.Remove("1");问a.Count 和b.Count的值?为什么时这样

解决方案 »

  1.   

    因为 b = a; 的意思是把 a 的引用地址给 b, 不是把列表内容给 b分清值类型 引用类型
      

  2.   

    用的  泛型
    我不知道  Remove();方法 是做什么的
    但是  b=a;之后 b和a  b和a的值应该一样了
      

  3.   

    a.Count 和b.Count 都是1.因为a 和 b 都是引用类型,b = a,此时a b 其实指向的是同一内存地址。故1
      

  4.   

    推荐楼主仔细品读以下文章,保证你会彻底明白!!!!
    http://www.cnblogs.com/anytao/archive/2007/05/23/must_net_08.html
    http://www.cnblogs.com/anytao/archive/2007/05/28/must_net_09.html
    http://www.cnblogs.com/anytao/archive/2007/06/18/must_net_10.html
    http://www.cnblogs.com/anytao/archive/2007/12/03/must_net_18.html
    http://www.cnblogs.com/anytao/archive/2007/12/07/must_net_19.html
      

  5.   

    任何不new的操作,都不会产生自己的内存块,只是地址的赋值而已。所以a和b都指向堆里的新new的list。所以b的remove操作后,用a来访问这个list,它的item数也只有一个了。
      

  6.   

    b = a; 
    ==>将b这个变量指向a对象,然后操作b其实就是操作a
      

  7.   

    try this: b = new List<string>(a);
      

  8.   


    堆栈              托管堆a---------》》》【 List《string》  】
           b—————》》》【 List《string》    】
                  
    上面是初始化时 堆栈              托管堆a---------》》》【 “1”,“2”  】
           b—————》》》【 List《string》    】    上面是给a添加内容堆栈              托管堆a---------》》》【 List《string》  】
         |
         |  
         |
    b——            【 List《string》    】     上面是b=a现在你应该明白了吧?  
      

  9.   

    a与b是对象赋值,是引用关系
    所以操作b就等于操作a
      

  10.   

    这样就可以了
     List<string> a = new List<string>();
                List<string> b;
                a.Add("1");
                a.Add("2");
                b = new List<string>(a);
                b.Remove("1");