Как копировать ReadOnlySpan со смещением?

В C# 7.2 и выше у нас есть тип данных ReadOnlySpan<T>, который представляет неизменяемый вид массива или другой блок памяти типа T. ReadOnlySpan позволяет нам работать с данными без копирования, что обеспечивает высокую производительность. Однако иногда может возникнуть необходимость скопировать часть ReadOnlySpan с определенным смещением. В этом случае мы можем воспользоваться методом Slice() для создания нового ReadOnlySpan.

Метод Slice() принимает начальное смещение и возвращает новый ReadOnlySpan, который ссылается на ту же память, но начинается с указанного смещения. Ниже приведен пример использования метода Slice() для копирования ReadOnlySpan со смещением:

ReadOnlySpan<byte> sourceSpan = new byte[] { 1, 2, 3, 4, 5, 6 };
int offset = 2;
ReadOnlySpan<byte> copiedSpan = sourceSpan.Slice(offset);

В этом примере мы создаем исходный ReadOnlySpan типа byte с элементами от 1 до 6. Затем мы устанавливаем смещение offset равным 2, чтобы начать копирование с третьего элемента. Далее мы вызываем метод Slice(offset) для создания нового ReadOnlySpan, который ссылается на ту же память, но начинается с третьего элемента [3, 4, 5, 6].

Данный результат помещается в переменную copiedSpan, которая является ReadOnlySpan<byte> и содержит только скопированные элементы.

Таким образом, мы можем использовать метод Slice() для скопирования ReadOnlySpan со смещением и получить новый ReadOnlySpan, который ссылается только на часть данных исходного ReadOnlySpan. Это позволяет нам работать только с нужными нам данными без затрат на копирование всего блока памяти.