假设有一个 class A
那么 list<A> b
给b初始添加一些类型A的值
现在设变量 A a = new A();
a = b[0];
我想对a进行一些修改然后在和b[0] 比较 不同则添加进b
但是 修改a后b[0]也会相应修改
我该怎么办 新人比较渣 求助 希望方法简单一点
------解决思路----------------------
对于变量来说分为:值类型, 引用类型。
值类型,比如 a=1; 如果b=a,那么b也=1,这时再修改a或者b,对于另外一个变量来说都没有影响。
引用类型,a=ClassA, b=a, 不管a,还是b获取到的是都是ClassA的存储的地址。所以修改a,或则b,实际修改的是
那个地址的东西。所以大家都变了。
只有几个简单的是属于值类型,比如int ,string ,bool 等,其他的比较复杂的都是属于引用类型。
------解决思路----------------------
你这种情况浅复制就行,稍作修改就行。
A a = new A();
//下面这样修改一下
a = (A)b[0].Clone();
class A:ICloneable//加上ICloneable接口
{
//你原来的类里面加上Clone()方法的实现就行
public object Clone()
{
return this.MemberwiseClone();
}
}
------解决思路----------------------
C#里,类是引用类型,还有值类型。引用类型的对象存储着地址,值类型存储的是值,举例:声明一个值类型变量,相当于建了个房子,并放进一袋大米,访问这个变量,相当于打开房子取出大米;new一个引用类型的对象,也是建了一个房子,只是房子里放的不是大米,是一张纸条,上书大米存放在XXX大厦A座40层8405房间,根据这个地址就能找到大米。a和b[0]相当于2个房子,a=b[0];相当于2房子中放的纸条上写着一个地址,指向一个放大米的房间。
不要写a=b[0],让改变后的a和list里的每个元素比较不就行了
更多类型问题,去MSDN上去学习吧
------解决思路----------------------
如果A类型没有引用引用类型,如:class、interface、delegate、index等,让两个对象不一致,shallow copy 也是可以的。
如果引用了引用类型,要让里面的内容也不一致,就deep copy