这是克隆c#数组列表最快的方式

本文关键字:方式 列表 数组 | 更新日期: 2023-09-27 18:03:59

正如subj行所表明的那样,我想知道如果我在我的重写Clone()方法中执行这两种操作,克隆一个普通的数组列表会有什么不同。

MyArraylist只是一个普通数组列表的衍生物。

选项1

return new MyArraylist(this);

选项2

MyArraylist temp = new MyArraylist();
temp = (MyArraylist)this.Clone();
return temp;

其中this指需要克隆的Arraylist。我的arraylist类有一个重载构造函数

public MyArrayList(MyArrayList oArrayList)
{
    lock (oArrayList.SyncRoot)
    {
        foreach (object oObject in oArrayList)
        {
            if (oObject is ICloneable)
            {
                this.Add(((ICloneable)oObject).Clone());
            }
            else
            {
                this.Add(oObject);
            }
        }
    }
}

如果使用选项1中的选项,是否会导致性能下降?想要一个相对更大的列表?

希望我讲清楚了

这是克隆c#数组列表最快的方式

在你发布了你的代码之后,我认为你是在比较克隆数组列表(选项1)与克隆数组列表加上克隆数组列表内的任何可克隆对象。
编辑:数组列表本身只是一个包含引用的对象。因此new只是创建一个新的数组列表。你有2个数组列表和x个对象。第二个选项将创建一个新的数组列表,并克隆引用的对象,因此您将需要2个数组列表和2*x对象。
这取决于您的需求,如果您需要选项1或选项2。选项1总是更快,因为它的工作量更少。