Я думал, что для клонирования списка вы бы просто позвонили:
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:
Я взял код глубокой копии, предложенный Binoj Antony, и создал этот метод расширения:
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);
Я почти уверен, что получу Список, заполненный новыми уникальными предметами, верно?