【发布时间】:2018-01-23 09:56:36
【问题描述】:
我正在尝试从现有数组中获取子数组的引用。 当我对子数组进行修改时,我希望能够更新原始数组。 示例:
byte[] array = {0 , 1, 2, 3, 4};
byte[] subarray = array.Skip(2).Take(3).ToArray();
subarray[0] = 8;
Console.WriteLine("array[2] = " + array[2]);
我想看看:
数组[2] = 8
但是,我得到了:
数组[2] = 2
我读过这个solution,但它不够好,因为我不想提供修改不在范围内的数组值的选项,如下所示:
ArraySegment<byte> segment = new ArraySegment<byte>(array, 2, 3);
byte[] segmentByte = segment.ToArray();
我可以通过segmentByte修改所有原始数组。这是我要防止的。
【问题讨论】:
-
如何使用您提供的链接中指定的 ArraySegment 作为答案?
-
@ArraySegment: "多个 ArraySegment
实例可以引用同一个原始数组并且可以重叠。", "对 Array 属性返回的数组所做的更改是对原始数组进行的。" > 听起来正是您想要的,您所说的“修改选项......不在范围内”是什么意思? -
当您执行
ToArray()时,它会创建一个与主数组没有任何关系的全新对象。 -
我添加了为什么我不想使用 ArraySegment 的解释
-
你的技术栈有多新 - 引入了 C# 7.2
Span<T>...