复制 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 想要深拷贝,这是一个有效的选项。