C#一个集合引用另一个集合导致一起改变(深度拷贝)
Posted 沧海·
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#一个集合引用另一个集合导致一起改变(深度拷贝)相关的知识,希望对你有一定的参考价值。
昨天在写代码的时候第一次遇到深度拷贝的问题具体是这样
list a= new list();
a= ***
list b=new list();
b=a;
a再次赋值的时候会发生b也跟着一起改变的情况
这是因为
当他指向堆的时候 obj1只是相当于一个门牌号了,引用的集合发生变化他所指向的地址也跟着变了。于是我做了如下的改造
首先你要保证你的实体类是可以被序列化的,加上这个特性标签
我通过 利用 System.Runtime.Serialization序列化与反序列化完成引用对象的复制
我们对集合的赋值进行深度拷贝
public static T Clone<T>(T RealObject)
using (Stream objStream = new MemoryStream())
//利用 System.Runtime.Serialization序列化与反序列化完成引用对象的复制
IFormatter formatter = new BinaryFormatter();
formatter.Serialize(objStream, RealObject);
objStream.Seek(0, SeekOrigin.Begin);
return (T)formatter.Deserialize(objStream);
List<a> a= new List<a>();
a= Clone<List<a>>(b);
这时候 当b的值在发生改变的时候a的值就不会随着b一起改变了。
因为我们进行了深度拷贝。
以上是关于C#一个集合引用另一个集合导致一起改变(深度拷贝)的主要内容,如果未能解决你的问题,请参考以下文章