这是克隆c#arraylist的最快方法

时间:2011-07-29 05:41:02

标签: c# .net c#-2.0

由于subj行几乎清楚,我想知道如果我在我的覆盖Clone()方法中执行其中任何一个,克隆普通arraylist会有什么不同。

MyArraylist只是普通arraylist的衍生物。

选项1

return new MyArraylist(this);

选项2

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

其中指的是焦点中需要克隆的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);
            }
        }
    }
}

如果我在OPTION 1中使用相对较大的列表,是否会产生性能损失?

希望我很清楚

1 个答案:

答案 0 :(得分:0)

在您发布代码之后,我认为您只是将克隆数据列表(选项1)与克隆数组列表进行比较,并将数组列表中的任何可克隆对象相互克隆。 编辑:数组列表只是一个包含引用的对象。因此,新的只是创建一个新的数组列表。所以你有2个数组列表和x个对象。第二个选项将创建一个新的数组列表,并将克隆引用的对象,因此您将需要2个数组列表和2 * x个对象。
这取决于您的要求,如果您需要选项1或选项2.选项1将始终更快,因为它更少工作。