如何实现数组按值赋值 避免修改新数组时影响原数组
问题原因
C#中数组属于引用类型,直接使用=赋值时,仅复制了原数组的内存引用指针,两个变量实际指向堆上的同一个数组实例,因此修改新数组的元素会同步影响原数组。
实现值拷贝的常用方案
你当前使用的是float值类型数组,以下几种浅拷贝方案即可满足需求,修改新数组不会影响原数组:
- 方案1:使用
Array.Copy()(性能最优,适合大数组场景)
float[] baseArray = new float[] {1, 2, 3, 4}; // 先初始化和原数组长度一致的新数组 float[] newArray = new float[baseArray.Length]; // 执行元素拷贝:原数组、目标数组、拷贝长度 Array.Copy(baseArray, newArray, baseArray.Length); newArray[0] = 5; print(newArray[0]); // 输出5 print(baseArray[0]); // 输出1
- 方案2:使用LINQ的
ToArray()(写法最简洁,适合快速开发)
float[] baseArray = new float[] {1, 2, 3, 4}; float[] newArray = baseArray.ToArray(); newArray[0] = 5; print(newArray[0]); // 输出5 print(baseArray[0]); // 输出1
- 方案3:使用
Array.Clone()
float[] baseArray = new float[] {1, 2, 3, 4}; // Clone方法返回object类型,需要显式强转为对应数组类型 float[] newArray = (float[])baseArray.Clone(); newArray[0] = 5; print(newArray[0]); // 输出5 print(baseArray[0]); // 输出1
注意事项
如果数组存储的是引用类型元素(如自定义类实例),以上方案均为浅拷贝,仅会复制元素的引用指针,修改元素内部属性依然会影响原数组,需要完全隔离时要自行实现深拷贝逻辑。
内容的提问来源于stack exchange,提问作者Calvin Dantis
相关产品推荐
相关产品推荐

