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

时间:2010-05-03 10:10:35

标签: c# bindinglist

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

只需使用ForEach()?或者有更好的方法吗?

4 个答案:

答案 0 :(得分:3)

BindingList有一个可以接受IList的构造函数。 BindingList实现了IList。所以你可以做到以下几点:

BindingList newBL = new BindingList(oldBL);

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

来自删除的答案:

  

序列化对象,然后反序列化   获得深度克隆的非引用   复制

如果OP需要深层复制,那么这是一个有效的选项。

答案 3 :(得分:1)

我们使用Serialize / De-serialize路由获取列表的深层副本。它运行良好,但它确实会降低较大列表中的性能,例如搜索屏幕,因此我不会在包含5000多个项目的列表中使用它。

using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

namespace ProjectName.LibraryName.Namespace
{
    internal static class ObjectCloner
    {
        /// 
        /// Clones an object by using the .
        /// 
        /// The object to clone.
        /// 
        /// The object to be cloned must be serializable.
        /// 
        public static object Clone(object obj)
        {
            using (MemoryStream buffer = new MemoryStream())
            {
                BinaryFormatter formatter = new BinaryFormatter();
                formatter.Serialize(buffer, obj);
                buffer.Position = 0;
                object temp = formatter.Deserialize(buffer);
                return temp;
            }
        }
    }
}