C#中能否创建指向其他数组的合并数组?
在C#中实现联动更新的合并数组
首先明确:原生double[]是值类型的连续存储结构,直接合并会生成独立的新数组,修改原数组不会同步到合并后的数组。你代码里的arr1 + arr2写法不可行,因为C#数组没有重载加法运算符。
普通合并数组(无联动更新)
如果不需要原数组和合并数组的联动,只是单纯合并两个数组,可以用以下两种方式:
// 方式1:用LINQ的Concat方法 double[] mergedArr = arr1.Concat(arr2).ToArray(); // 方式2:手动复制元素 double[] mergedArr = new double[arr1.Length + arr2.Length]; Array.Copy(arr1, mergedArr, arr1.Length); Array.Copy(arr2, 0, mergedArr, arr1.Length, arr2.Length);
但这两种方式生成的都是全新数组,修改arr1或arr2的元素,mergedArr不会同步变化。
实现联动更新的合并“数组”
要实现原数组修改时合并集合自动更新,不能用原生数组,得自定义一个包装类,内部持有原数组的引用,通过索引器动态返回对应位置的元素:
public class MergedArrayWrapper { private readonly double[] _array1; private readonly double[] _array2; public MergedArrayWrapper(double[] array1, double[] array2) { _array1 = array1 ?? throw new ArgumentNullException(nameof(array1)); _array2 = array2 ?? throw new ArgumentNullException(nameof(array2)); } // 获取合并后的总长度 public int Length => _array1.Length + _array2.Length; // 自定义索引器,动态映射到原数组 public double this[int index] { get { if (index < 0 || index >= Length) throw new IndexOutOfRangeException(); return index < _array1.Length ? _array1[index] : _array2[index - _array1.Length]; } set { if (index < 0 || index >= Length) throw new IndexOutOfRangeException(); if (index < _array1.Length) _array1[index] = value; else _array2[index - _array1.Length] = value; } } // 支持foreach遍历 public IEnumerator<double> GetEnumerator() { foreach (var item in _array1) yield return item; foreach (var item in _array2) yield return item; } }
使用示例
double[] arr1 = new double[2] { 1, 2 }; double[] arr2 = new double[2] { 3, 4 }; var mergedWrapper = new MergedArrayWrapper(arr1, arr2); // 访问合并后的元素 Console.WriteLine(mergedWrapper[0]); // 输出1 Console.WriteLine(mergedWrapper[3]); // 输出4 // 修改原数组arr1的元素,合并wrapper同步更新 arr1[0] = 10; Console.WriteLine(mergedWrapper[0]); // 输出10 // 通过wrapper修改元素,原数组也会同步变化 mergedWrapper[2] = 30; Console.WriteLine(arr2[0]); // 输出30
这个包装类不会创建新数组,所有读写操作都直接指向原数组的引用,所以原数组的修改会实时反映在wrapper的访问结果中。如果需要更贴近原生数组的行为,还可以让这个类实现IList<double>接口,支持更多集合操作。
内容的提问来源于stack exchange,提问作者c_ph_r
相关产品推荐
相关产品推荐

