Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#-为什么Array.Clone()需要强制转换?_C#_Arrays - Fatal编程技术网

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”中引用了它。数组的浅层副本仅复制

show The C#的Array.Clone()方法返回类型
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;
}