我想要克隆一个List你只需要调用:
List<int> cloneList = new List<int>(originalList);
Run Code Online (Sandbox Code Playgroud)
但是我在我的代码中尝试了这一点,我似乎得到的效果暗示上面只是在做:
cloneList = originalList ...因为对cloneList的更改似乎正在影响originalList.
那么克隆List的方法是什么?
编辑:
我在考虑做这样的事情:
public static List<T> Clone<T>(this List<T> originalList) where T : ICloneable
{
return originalList.ConvertAll(x => (T) x.Clone());
}
Run Code Online (Sandbox Code Playgroud)
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);
}
}
Run Code Online (Sandbox Code Playgroud)
EDIT3:
现在,假设列表中的项目是结构.如果我打电话会怎么样?:
List<StructType> cloneList = new List<StructType>(originalList);
Run Code Online (Sandbox Code Playgroud)
我非常肯定,我会得到一个填充了新的独特项目的列表,对吗?