如何复制或克隆数组并修改,且不会影响原数组?
问题原因
数组属于引用类型,你写的string[] new_words = words;只是把原数组的内存引用地址赋值给了新变量,两个变量实际指向堆内存中的同一个数组实例,因此修改任意一方的元素都会同步影响另一方。
正确复制方法
下面给出几种C#中实现数组浅拷贝(完全满足你的string数组使用需求)的常用方案:
- 方案1:使用
Array.Clone()方法
该方法会直接创建原数组的浅拷贝,返回值需要强转为对应数组类型:string[] new_words = (string[])words.Clone(); new_words[1] = "hi!"; // 仅修改新数组,原数组不受影响 - 方案2:使用
Array.Copy()方法
先初始化长度相同的新数组,再通过Copy方法批量复制元素:string[] new_words = new string[words.Length]; Array.Copy(words, new_words, words.Length); new_words[1] = "hi!"; - 方案3:使用LINQ的
ToArray()扩展方法(需引入using System.Linq;)
写法更简洁:string[] new_words = words.ToArray(); new_words[1] = "hi!";
注:以上三种均为浅拷贝实现,对于当前的
string类型数组完全够用;如果后续操作的是自定义引用类型数组,且需要修改数组元素的内部属性时不影响原数组,需要额外实现深拷贝逻辑。
内容的提问来源于stack exchange,提问作者Dranreb
相关产品推荐
相关产品推荐

