I thought that to clone a List you would just call:
List<int> cloneList = new List<int>(originalList);
But I tried that in my code and I seem to be getting effects that imply the above is simply doing:
cloneList = originalList… because changes to cloneList seem to be affecting originalList.
So what is the way to clone a List?
EDIT:
I am thinking of doing something like this:
public static List<T> Clone<T>(this List<T> originalList) where T : ICloneable { return originalList.ConvertAll(x => (T) x.Clone()); }
EDIT2:
I took the deep copy code suggested by Binoj Antony and created this extension method:
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:
Now, say the items in the List are structs. What then would result if I called?:
List<StructType> cloneList = new List<StructType>(originalList);
I am pretty sure than I would get a List filled with new unique items, correct?
You can use the below code to make a deep copy of the list or any other object supporting serialization:
Also you can use this for any version of .NET framework from v 2.0 and above, and the similar technique can be applied (removing the usage of generics) and used in 1.1 as well
You can call it by using
Full code to test if this works: