Я подумал, что для клонирования списка вы просто вызываете:
List<int> cloneList = new List<int>(originalList);
Но я пробовал это в своем коде, и я, кажется, получаю эффекты, которые подразумевают, что выше это просто:
cloneList = originalList... потому что изменения в cloneList, похоже, влияют на originalList.
Итак, каков способ клонирования списка?
EDIT:
Я собираюсь сделать что-то вроде этого:
public static List<T> Clone<T>(this List<T> originalList) where T : ICloneable
{
return originalList.ConvertAll(x => (T) x.Clone());
}
EDIT2:
Я взял глубокий код копирования, предложенный Биноем Антонием, и создал этот метод расширения:
public static T DeepCopy<T>(this T original) where T : class
{
using (MemoryStream memoryStream = new MemoryStream())
{
BinaryFormatter binaryFormatter = new BinaryFormatter();
binaryFormatter.Serialize(memoryStream, original);
memoryStream.Seek(0, SeekOrigin.Begin);
return (T)binaryFormatter.Deserialize(memoryStream);
}
}
EDIT3:
Теперь, скажем, элементы в списке - это структуры. Что тогда получилось бы, если я позвоню?:
List<StructType> cloneList = new List<StructType>(originalList);
Я уверен, что получу список, заполненный новыми уникальными элементами, правильно?