使用array.Copy()自动转换数组内容的类型

本文关键字:数组 类型 转换 Copy array 使用 | 更新日期: 2023-09-27 18:27:22

我正试图使用Array.copy()方法复制c#中的许多数组。这个方法应该自动进行类型转换,但是我想知道如果我定义一个这样的构造函数,它是否会转换用户定义的类型:

OldType(){
int param1;
String param2;
}
NewType(OldType old){
setParam1(old.param1);
setParam2(old.param2);
}
OldType oldArray[];
NewType newArray[];
//will this automatically convert???
Array.Copy(oldArray, newArray);

这用于从旧对象转换为新对象。内容完全相同,只是名称不同。

使用array.Copy()自动转换数组内容的类型

有一种简单的方法可以在不让自己或任何阅读代码的人产生疑问的情况下进行转换:使用LINQ。

OldType[] oldArray = /* Some logic */;
NewType[] newArray = oldArray.Select(old => new NewType(old)).ToArray();

正如这里的文件(M.Babcock在评论中指出的)所说,Array.Copy是O(n)运算。同样,我上面写的LINQ代码是一个O(n)运算,所以没有渐进的性能影响(墙上时钟时间的实际性能取决于许多因素,所以如果不进行分析,我就无法比较这两个解决方案的运行时间),你知道这段代码是正确的。

同样来自MSDN文档:

如果sourceArraydestinationArray

因此,Array.Copy不会"自动转换",即在复制过程中实际创建NewType类型的新对象,而是简单地将引用复制到OldType类型的对象,并将这些引用放在newArray中。