C#-为什么Array.Clone()需要强制转换?
show The C#的Array.Clone()方法返回类型C#-为什么Array.Clone()需要强制转换?,c#,arrays,C#,Arrays,show The C#的Array.Clone()方法返回类型object: public object Clone (); 事实上,他们给出的例子包括一个演员阵容 乙二醇 为什么Clone()返回的是对象而不是预期的类型?因为.Clone()返回的是对象而不是int。因此,它需要一个类型为int.Clone()的强制转换。Clone()是ICloneable.Clone的一个实现,然后它必须返回一个对象。 提到的Microsoft文档在“Implements”中引用了它。数组的浅层副本仅复制
object
:
public object Clone ();
事实上,他们给出的例子包括一个演员阵容
乙二醇
为什么Clone()返回的是对象而不是预期的类型?因为.Clone()返回的是对象
而不是int
。因此,它需要一个类型为int
.Clone()
的强制转换。Clone()是ICloneable.Clone
的一个实现,然后它必须返回一个对象。
提到的Microsoft文档在“Implements”中引用了它。数组的浅层副本仅复制数组的元素,无论它们是引用类型还是值类型,但它不复制引用引用的对象。新数组中的引用指向的对象与原始数组中的引用指向的对象相同
相反,数组的深度副本复制元素以及元素直接或间接引用的所有内容
克隆与原始阵列的类型相同
int[] array = new int[2] { 12, 13 };
int[] arrClone = (int[])array.Clone();
//or
object arrClone1 = array.Clone();
//or
object arrClone2 = array;
foreach(var item in (IEnumerable<int>)arrClone2)
{
int x = item;
}
int[]数组=新的int[2]{12,13};
int[]arrClone=(int[])array.Clone();
//或
对象arrClone1=array.Clone();
//或
对象arrClone2=数组;
foreach(变量项在(IEnumerable)arrClone2中)
{
int x=项目;
}
因为该方法早于泛型并返回一个对象,非常简单。您可以使用ToArray()
来实现同样的效果,这不需要使用cast,因为速度太快了!听起来很有道理。谢谢为ToArray()
技巧干杯,我也错过了这一点。此外,这种方法适用于任何维度的数组,因为历史原因,包括具有非零边界的数组:)()(我真正的问题是,为什么语言设计成Clone()
返回对象,而不是(在本例中)int[]
。我真的不知道。谢谢。我的问题不是关于深度副本和浅层副本。而是关于为什么语言的设计使得Clone()
的返回类型很尴尬。请参阅此链接:。此链接提供了对我非常有用的全面解释。
int[] array = new int[2] { 12, 13 };
int[] arrClone = (int[])array.Clone();
//or
object arrClone1 = array.Clone();
//or
object arrClone2 = array;
foreach(var item in (IEnumerable<int>)arrClone2)
{
int x = item;
}