在高级编程语言中我们经常会定义一些数据变量的对象,并在不同的功能过程中使用到相同的数据对象,但是往往有时候我们不希望莫格过程中的修改,改变数据的原来面目亦或者是需要一份完全相同的数据变相对象,由此就会使用数据 的复制。
那么浅表复制有深表复制有什么样子的区别呢?
浅表复制:只是复制了数据 在内存中的引用地址,因此如果在数据的副本中修改数据的话,源对象也会同样发生改变。
深表复制:意指堆中的内容也会拷贝。
public ObservableCollection<T> Clone<T>(ObservableCollection<T> inputList)
{
BinaryFormatter Formatter = new BinaryFormatter(null, new StreamingContext(StreamingContextStates.Clone));
System.IO.MemoryStream stream = new System.IO.MemoryStream();
Formatter.Serialize(stream, inputList);
stream.Position = 0;
var outList = Formatter.Deserialize(stream) as ObservableCollection<T>;
stream.Close();
return outList;
}
public List<T> Clone<T>(List<T> inputList)
{
BinaryFormatter Formatter = new BinaryFormatter(null, new StreamingContext(StreamingContextStates.Clone));
System.IO.MemoryStream stream = new System.IO.MemoryStream();
Formatter.Serialize(stream, inputList);
stream.Position = 0;
var outList = Formatter.Deserialize(stream) as List<T>;
stream.Close();
return outList;
}