C#.Net笔记其之二:ArrayList深层复制
2008-02-08 20:02
302 查看
复制 ArrayList 的时候,使用 ArrayList.Clone() 方法复制出来的新 ArrayList 之中元素的值会随着源 ArrayList 中元素的值发生变化而一起改变。
查 MSDN:集合的浅表副本仅复制集合的元素(不论它们是引用类型还是值类型),但不复制引用所引用的对象。新集合中的引用与原始集合中的引用指向相同的对象。与之相对,集合的深层副本将复制这些元素以及由它们直接或间接引用的所有内容。
ArrayList.Clone() 返回值是 ArrayList 的浅表副本。
上网查了一下,大多数是新建一个实例,逐条复制 property,使用 for 实现:
for (int i = 0; i < arraylist1.Count; i++)
{
Class t = new Class(); // Class是类名
// 下面这句,若类 Class 中若有很多 Property,就要写很多行
t.property = (Class)arraylist1[i].property;
arraylist2.Add(t);
}
我们知道,对于自定义的类,一般通过继承 ICloneable接口,重写 Clone() 方法来自己实现深拷贝。
因此如果类有继承 ICloneable 接口,也可以这么写:
for (int i = 0; i < list1.Count; i++)
MemoryStream ms = new MemoryStream();
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(ms,list1); // list1中元素的类要实现ISerializable接口
ms.Seek(0, SeekOrigin.Begin);
ArrayList list2 = (ArrayList)bf.Deserialize(ms);
对于 ICollection,应该都差不多吧。
参考:http://topic.csdn.net/t/20051026/10/4350726.html
查 MSDN:集合的浅表副本仅复制集合的元素(不论它们是引用类型还是值类型),但不复制引用所引用的对象。新集合中的引用与原始集合中的引用指向相同的对象。与之相对,集合的深层副本将复制这些元素以及由它们直接或间接引用的所有内容。
ArrayList.Clone() 返回值是 ArrayList 的浅表副本。
上网查了一下,大多数是新建一个实例,逐条复制 property,使用 for 实现:
for (int i = 0; i < arraylist1.Count; i++)
{
Class t = new Class(); // Class是类名
// 下面这句,若类 Class 中若有很多 Property,就要写很多行
t.property = (Class)arraylist1[i].property;
arraylist2.Add(t);
}
我们知道,对于自定义的类,一般通过继承 ICloneable接口,重写 Clone() 方法来自己实现深拷贝。
因此如果类有继承 ICloneable 接口,也可以这么写:
for (int i = 0; i < list1.Count; i++)
MemoryStream ms = new MemoryStream();
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(ms,list1); // list1中元素的类要实现ISerializable接口
ms.Seek(0, SeekOrigin.Begin);
ArrayList list2 = (ArrayList)bf.Deserialize(ms);
对于 ICollection,应该都差不多吧。
参考:http://topic.csdn.net/t/20051026/10/4350726.html
相关文章推荐
- ArrayList-asp.net入门笔记
- C#学习笔记之二(stack, queue, string, HashTable,StringBui
- 探求C#.Net中ArrayList与Array的区别
- Ajax之二: XMLHttpRequest之POST传递XML (应用环境: Windows + IE + .NET[C#])
- C#.net ArrayList的使用方法 [转]
- c# 学习笔记 ArrayList的Sort方法的实现
- c#.net ArrayList的用法
- <NET CLR via c# 第4版>笔记 第10章 属性
- lucene.Net--学习笔记(3)---C#'网络爬虫' 源码详解
- C#.NET常见问题(FAQ)-程序如何把窗体文件从从一个项目中复制到另一个项目
- ASP.NET 学习笔记之二 建立 ASP.NET 应用程序
- ASP.NET MVC 学习笔记-2.Razor语法 ASP.NET MVC 学习笔记-1.ASP.NET MVC 基础 反射的具体应用 策略模式的具体应用 责任链模式的具体应用 ServiceStack.Redis订阅发布服务的调用 C#读取XML文件的基类实现
- [C#.Net&Linq]LINQ to Object 学习笔记(资料群组GroupBy、ToLookup、ToDictionary)
- C#.NET:WCF系列笔记之通过代码部…
- C# 下实现把Array复制到ArrayList中的四种方法
- 《Web Service 编程 --用C#.NET 开发网络服务》北京希望出版社 我的学习笔记(第一章)(也就是书上抄了一写东西而已)
- Visual C#.NET 网络核心编程 笔记
- c#.net ArrayList的用法
- C#笔记 ADO.NET操作SQL SERVER数据库
- C# ArrayList.ToArray() (将 ArrayList 的元素复制到新数组中)