List<string>赋值传值还是地址
list<string>.add(string)是传的值还是传的地址
------解决方案--------------------引用
你可以看看这篇文章:
http://blog.csdn.net/masterft/article/details/1727151
------解决方案--------------------引用类型
所以new 一个list, 即便值相同,你用equlas比较也是认为不同的
------解决方案--------------------赋值 是引用地址指向改变
new一个list是在内存开辟了新 的空间,引用地址指向新的空间。
------解决方案--------------------在C#中,所有用对象类型当函数参数的,传的都是引用,函数内部无法改变引用所指的对象,但是可以修改对象的属性。如果要在函数内修改引用所指向的对象,参数就要声明为ref或者out。
而所有的值类型,包括预定义的各种数值类型,枚举类型以及Struct声明的类型,当成函数参数时,传的都是值,函数内对值或Struct的属性的修改,都无法反映到函数的调用者的scope中。
------解决方案--------------------add 也是引用地址
------解决方案--------------------List内部的是一个顺序存储结构:
看下这内部实现就知道,根据T的类型来决定的,如果是传人的值类型,当然就是传值,引用类型就是传递的地址,但是string是一个特殊的情况,它是引用类型,但是传递后给方法后是一个新的string,在方法内部改变后,它之前的值却是不受影响的,这就会造成值类型的一个假象。