List<sting> list1 = new List<string>();
List<sting> list2 = new List<string>();......
......
list1 = list2;
请问,如何使得list1不随着list2的值而变化
是用ref还是out ?

解决方案 »

  1.   

    List<string> t = new List<string>(); //original List<string> t2 = new List<string>(t.ToArray()); // copy of t
      

  2.   

    拷贝数组就行了,你这个问题不是ref和out考虑的首先:两者都是按地址传递的,使用后都将改变原来的数值。很多人在论坛上解释说out是按数值传递,是错误的。简单的测试后可以知道out使用也能改变数值的,所以肯定是按照地址传递的。
    其次:rel可以把参数的数值传递进函数,但是out是要把参数清空,就是说你无法把一个数值从out传递进去的,out进去后,参数的数值为空,所以你必须初始化一次。这个就是两个的区别,或者说就像有的网友说的,rel是有进有出,out是只出不进。经典!!!
      

  3.   

    1、引用类型是对地址操作的,及对象的本身会改变list1 = list2;这时list1和list2指向同一个地址,list2就会引起list1的改变2、值类型是拷贝一个副本去操作,操作过后对象本身并没有改变3、为了让值类型经某操作过后,对象本身要改变的话,用ref和out就可以将值类型当成引用类型所以你这个问题不是ref out能解决的。关于ref和out,看看这里就明白了你想保存list1的话,建议你用值类型(如数组)就可以解决,而不是用引用类型。