You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现数组按值赋值 避免修改新数组时影响原数组

问题原因

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 13:45:02