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?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…