Каков наилучший способ скопировать BindingList?
Просто использовать ForEach()? Или есть лучшие способы?
Каков наилучший способ скопировать BindingList?
Просто использовать ForEach()? Или есть лучшие способы?
BindingList имеет конструктор, который может принимать IList. И BindingList реализует IList. Итак, вы можете просто сделать следующее:
BindingList newBL = new BindingList(oldBL);
Конечно, при этом создается второй список, который просто указывает на те же объекты. Если вы действительно хотите клонировать объекты в списке, вам придется проделать дополнительную работу.
Foreach в значительной степени является самым простым способом, и накладные расходы на производительность минимальны, если таковые имеются.
Из удаленного ответа:
Сериализуйте объект, затем десериализуйте, чтобы получить глубокую клонированную копию без ссылок.
Это допустимый вариант, если ОП хочет получить глубокую копию.
Мы используем маршрут 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; } } } }