Если ваши элементы являются типами значений, то вы можете просто сделать:
List<YourType> newList = new List<YourType>(oldList);
Однако, если они являются ссылочными типами и вы хотите глубокое копирование (при условии, что ваши элементы правильно реализуют ICloneable
), вы можете сделать что-то вроде этого:
List<ICloneable> oldList = new List<ICloneable>();
List<ICloneable> newList = new List<ICloneable>(oldList.Count);
oldList.ForEach((item) =>
{
newList.Add((ICloneable)item.Clone());
});
Очевидно, замените ICloneable
в вышеприведенных обобщениях и приведите к типу элемента, который реализует ICloneable
.
Если ваш тип элемента не поддерживает ICloneable
, но имеет конструктор копирования, вы можете сделать это вместо этого:
List<YourType> oldList = new List<YourType>();
List<YourType> newList = new List<YourType>(oldList.Count);
oldList.ForEach((item)=>
{
newList.Add(new YourType(item));
});
Лично я бы избежал ICloneable
из-за необходимости гарантировать глубокую копию всех участников. Вместо этого я бы предложил конструктор копирования или метод фабрики, такой как YourType.CopyFrom(YourType itemToCopy)
, который возвращает новый экземпляр YourType
.
Любой из этих параметров может быть заключен в метод (расширение или иным образом).