gpt4 book ai didi

c# - 克隆对象 : Is serialization - deserialization a good practice for cloning objects?

转载 作者:太空宇宙 更新时间:2023-11-03 17:01:31 25 4
gpt4 key购买 nike

我需要在我正在处理的系统的不同部分克隆列表,我想出了以下解决方案,但我仍然担心它的性能我一直在想这是否是一个好方法.所以我决定在这里发布它,以便我可以找到与这种克隆对象方法相关的问题或缺陷。如果这是一个糟糕的举动,我想知道什么是最好的方法。

我的克隆列表的扩展方法:

    public static List<T> Clone<T>(this List<T> input)
{
using (System.IO.MemoryStream Mems = new System.IO.MemoryStream())
{
XmlSerializer Serializer = new XmlSerializer(typeof(T));
Serializer.Serialize(Mems, input);
var Deserialized = Serializer.Deserialize(Mems) as List<T>;
return Deserialized;
}
}

更新:假设 T 是一个值类型(总是)

最佳答案

这增加了相当大的性能损失并浪费了内存(XML 很冗长)。

浅克隆:

public static List<T> Clone<T>(this List<T> input)
{
return new List<T>(input);
}

深度克隆:

public static List<T> Clone<T>(this List<T> input) where T : ICloneable
{
var cloned = new List<T>(input.Capacity);
cloned.AddRange(input.Select(item => (T) item.Clone()));
return cloned;
}

关于c# - 克隆对象 : Is serialization - deserialization a good practice for cloning objects?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29310348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com