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

在C#中如何在函数内修改数组且不改变原数组?

你之前的写法var newArray = array仅复制了数组的引用,两个变量指向堆中的同一块数组内存,修改任意一个的元素都会同步到另一个。要实现修改不影响原数组,需要先对原数组做数据拷贝,生成独立的新数组实例。

如果数组元素是值类型、或者像string这样的不可变引用类型,用浅拷贝即可满足需求,有以下几种常用实现方式:

  • 方法1:使用Array.Copy手动拷贝
    代码示例:
    static void AddToArray(string[] array) {
        // 初始化同长度的新数组
        string[] newArray = new string[array.Length];
        // 全量拷贝原数组元素到新数组
        Array.Copy(array, newArray, array.Length);
        // 修改新数组完全不影响原数组
        newArray[2] = "y";
        // 若需要使用修改后的数组,可将newArray作为返回值返回
    }
    
  • 方法2:使用LINQ的ToArray()方法(写法更简洁)
    代码示例:
    // 需要先引入System.Linq命名空间
    static void AddToArray(string[] array) {
        string[] newArray = array.ToArray();
        newArray[2] = "y";
    }
    
  • 方法3:使用数组实例的Clone()方法
    代码示例:
    static void AddToArray(string[] array) {
        string[] newArray = (string[])array.Clone();
        newArray[2] = "y";
    }
    

注意事项

如果数组存储的是可变的自定义类实例,上述浅拷贝仅会拷贝实例的引用,修改新数组中实例的属性仍会同步到原数组的对应元素,这种场景下需要对数组元素做深拷贝,实现方式可以是遍历数组逐个拷贝元素实例,或者通过序列化/反序列化的方式生成全量副本。

内容的提问来源于stack exchange,提问作者Diesel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 07:39:04