小编典典

清单的深层副本

c#

我正在尝试对泛型列表进行深层复制,并且想知道是否还有其他方法可以创建复制方法并实际上一次复制每个成员。我有一堂课,看起来像这样:

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()获得子集时,我得到的是以前修改过的数据,而不是其他地方检索到的原始数据。

谁能给我指导如何解决这个问题的方法?非常感谢。


阅读 253

收藏
2020-05-19

共1个答案

小编典典

在C#中解决这个惯用的方法是实现ICloneable你的Data,并写了Clone,做深复制方法(然后大概一个Enumerable.CloneRange方法,在一次你的列表可以克隆一部分。)没有任何内置的伎俩或框架方法使其比这更容易。

除非真正关心内存和性能,否则我建议您尝试重新设计它以使其在不可变Data对象上运行。它将变得更加简单。

2020-05-19