Span - доступ к исходному значению

Я хочу получить исходное значение, которое представляет Span. Возьмите следующий код, например, как бы я, в DoWorkполучить доступ к оригинальному массиву байтов, не создавая его копию?

static void Main()
{
    var data = new byte[0x100];
    DoWork(new Span<byte>(data));
}

private void DoWork(Span<byte> Data)
{
    //var data = Data.ToArray(); Unsuitable; creates a copy
    //var data = (byte[])Data; Unsuitable; doesn't work
    //MemoryMarshal. Something in here may work, but unsure
    //MemoryExtensions. Something in here may work, but unsure
}

Я нашел 2 статических класса с вспомогательными методами (показанными выше), которые могут помочь, но я не уверен, что лучший способ сделать это, не делая вещи медленнее, чем просто копировать.

1 ответ

Согласно документу Span:

Так как это тип только для стека, Span не подходит для многих сценариев, которые требуют хранения ссылок на буферы в куче. Это относится, например, к процедурам, которые выполняют асинхронные вызовы методов. Для таких сценариев вы можете использовать бесплатные типы System.Memory и System.ReadOnlyMemory.

Поэтому, возможно, вам не нужно использовать Span:

static void Main()
{
    var data = new byte[0x100];
    DoWork(data);
}
private void DoWork(byte[] data)
{
    // data array is by reference.
}
Другие вопросы по тегам