C # Каков наилучший способ скопировать BindingList? - PullRequest
2 голосов
/ 03 мая 2010

Каков наилучший способ скопировать BindingList?

Просто использовать ForEach ()? Или есть лучшие способы?

Ответы [ 4 ]

3 голосов
/ 03 мая 2010

BindingList имеет конструктор, который может принимать IList. И BindingList реализует IList. Так что вы можете просто сделать следующее:

BindingList newBL = new BindingList(oldBL);

Конечно, это создает второй список, который просто указывает на те же объекты Если вы действительно хотите клонировать объекты в списке, вам нужно проделать дополнительную работу.

2 голосов
/ 03 мая 2010

Foreach - это, в основном, самый простой способ, а издержки производительности минимальны, если таковые имеются.

1 голос
/ 12 февраля 2011

Мы используем маршрут 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;
            }
        }
    }
}

1 голос
/ 03 мая 2010

Из удаленного ответа:

Сериализация объекта и десериализация. чтобы получить глубокий клон не ссылаться копия

Какой вариант допустим, если ОП хочет глубокую копию.

...