c# - List<T> 的深拷贝

标签 c# deep-copy

我正在尝试对通用列表进行深度复制,想知道是否还有其他方法可以创建复制方法并一次实际复制每个成员。我有一个看起来有点像这样的类:

public class Data
{            
    private string comment;
    public string Comment
    {
        get { return comment; }
        set { comment = value; }
    }

    private List<double> traceData;
    public List<double> TraceData
    {
        get { return traceData; }
        set { traceData = value; }
    }
}

我有上面数据的列表,即 List<Data> .我想要做的是将 List 子集的跟踪数据绘制到图形上,可能对数据进行一些缩放或扫描。我显然不需要绘制列表中的所有内容,因为它们不适合屏幕。

我最初尝试使用 List.GetRange() 获取列表的子集方法,但似乎在下面 List<double>正在浅复制而不是深复制。当我再次使用 List.GetRange() 获取子集时,我得到的是之前修改过的数据,而不是从别处检索到的原始数据。

任何人都可以告诉我如何处理这个问题吗?非常感谢。

最佳答案

在 C# 中处理此问题的惯用方法是实现 ICloneable在您的 Data 上,编写一个 Clone 方法来执行深拷贝(然后可能是一个 Enumerable.CloneRange 方法,它可以克隆您的部分数据一次列出。)没有任何内置的技巧或框架方法可以使它比这更容易。

除非内存和性能是一个真正的问题,否则我建议您努力重新设计它以对不可变的 Data 对象进行操作。它最终会简单得多。

关于c# - List<T> 的深拷贝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4226747/

相关文章:

groovy - Groovy 中的深复制映射

c++ - 如何从 const 对象(深度)复制 map

c# - 在 C# 中按字母顺序对数组进行排序

C# 等效于 C++ std::vector<int>.end()

c++ - PIMPL习语和复制语义

JavaScript:深度复制循环 JSON

c# - 使用 win32 DLL 部署 XBAP

c# - 如何让 c# 类相互了解?

c# - 如何在 .NET 中使用 VB6 dll 中的方法?

java - 在 Java 中克隆列表