复制 BindingList 的最佳方法是什么?
只使用 ForEach()?还是有更好的方法?
BindingList 有一个可以采用 IList 的构造函数。BindingList 实现了 IList。因此,您可以执行以下操作:
BindingList newBL = new BindingList(oldBL);
当然,这会创建仅指向相同对象的第二个列表。如果你真的想克隆列表中的对象,那么你必须做更多的工作。
Foreach 几乎是最简单的方法,如果有的话,性能开销是最小的。
我们使用 Serialize / De-serialize 路由来获取列表的深层副本。它运行良好,但在较大的列表(例如搜索屏幕)中会降低性能,因此我会避免在包含 5000 多个项目的列表中使用它。
使用系统; 使用 System.IO; 使用 System.Runtime.Serialization.Formatters.Binary; 命名空间 ProjectName.LibraryName.Namespace { 内部静态类 ObjectCloner { /// /// 使用 . 克隆一个对象。 /// /// 要克隆的对象。 /// /// 要克隆的对象必须是可序列化的。 /// 公共静态对象克隆(对象 obj) { 使用 (MemoryStream 缓冲区 = new MemoryStream()) { BinaryFormatter 格式化程序 = new BinaryFormatter(); formatter.Serialize(buffer, obj); 缓冲区.位置 = 0; object temp = formatter.Deserialize(buffer); 返回温度; } } } }
从已删除的答案中:
序列化对象然后反序列化以获得深度克隆的非引用副本
如果 OP 想要深拷贝,这是一个有效的选项。