这是克隆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中的选项,是否会导致性能下降?想要一个相对更大的列表?
希望我讲清楚了
在你发布了你的代码之后,我认为你是在比较克隆数组列表(选项1)与克隆数组列表加上克隆数组列表内的任何可克隆对象。
编辑:数组列表本身只是一个包含引用的对象。因此new只是创建一个新的数组列表。你有2个数组列表和x个对象。第二个选项将创建一个新的数组列表,并克隆引用的对象,因此您将需要2个数组列表和2*x对象。
这取决于您的需求,如果您需要选项1或选项2。选项1总是更快,因为它的工作量更少。