2

复制 BindingList 的最佳方法是什么?

只使用 ForEach()?还是有更好的方法?

4

4 回答 4

3

BindingList 有一个可以采用 IList 的构造函数。BindingList 实现了 IList。因此,您可以执行以下操作:

BindingList newBL = new BindingList(oldBL);

当然,这会创建仅指向相同对象的第二个列表。如果你真的想克隆列表中的对象,那么你必须做更多的工作。

于 2010-05-03T10:25:48.593 回答
2

Foreach 几乎是最简单的方法,如果有的话,性能开销是最小的。

于 2010-05-03T10:12:47.073 回答
1

我们使用 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);
                返回温度;
            }
        }
    }
}

于 2011-02-12T13:27:06.083 回答
1

从已删除的答案中:

序列化对象然后反序列化以获得深度克隆的非引用副本

如果 OP 想要深拷贝,这是一个有效的选项。

于 2010-05-03T10:27:54.353 回答