请阐述在 C# 编程语言中,Array.Copy() 方法与 Array.Clone() 方法之间的主要差异有哪些?
考察说明
考察对 C# 数组复制两种常见方法的理解,包括返回值类型、复制方式、性能及适用场景。
回答思路
- 【回答框架 1】Array.Clone() 是 Shallow Copy,返回 object 类型,需要显式转换为实际数组类型。它复制数组的元素,如果元素是引用类型,则复制引用,而非对象本身。
- 【回答框架 2】Array.Copy() 是静态方法,支持更多重载,可指定源数组、目标数组、复制长度或范围。它复制连续的数组段,可以用于部分复制,且目标数组需预先分配并兼容类型。
- 【回答框架 3】Array.Copy() 在类型转换上更灵活,可以复制到兼容类型的数组(如从 int[] 到 long[] 或 object[]),而 Clone() 返回同类型的数组(但为 object,需转换)。
- 【回答框架 4】性能上,两者底层都较高效,但 Clone() 通常用于完整复制数组,而 Copy() 适合部分复制或需要类型转换的场景。
- 【回答框架 5】如果数组元素是引用类型,两者都是浅拷贝,需注意修改引用对象会影响原数组;若需要深拷贝,需手动实现或使用序列化等方法。
- 【关键点 1】Clone() 返回 object,需要类型转换;Copy() 返回 void,直接操作目标数组。
- 【关键点 2】两者都是浅拷贝,引用类型元素只复制引用。
- 【关键点 3】Copy() 支持部分复制和类型转换,更灵活于复杂场景。
- 【易错点 1】误以为 Clone() 是深拷贝,引用类型元素修改会相互影响。
- 【易错点 2】忽略目标数组需预先创建并具有足够长度,否则抛出 ArgumentException。
- 【易错点 3】Copy() 在类型转换时可能抛出 ArrayTypeMismatchException,需确保类型兼容。