ExpertiDict

C# · Avançado · Inglês · Técnico

Span

/spæn/substantivo

Struct ref que oferece uma janela segura e sem alocação sobre memória contígua (array, stack ou memória nativa), permitindo fatiar e manipular dados sem copiá-los.

Onde usar

Aparece em parsers e código de alto desempenho, como fatiar um texto sem criar substrings. Como é um ref struct, só vive na stack: não pode ser campo de classe, nem ser usado em métodos async ou capturado por lambdas.

Em código

int[] dados = { 1, 2, 3, 4, 5 };
Span<int> meio = dados.AsSpan(1, 3);
meio[0] = 99;
Console.WriteLine(dados[1]); // 99

Exemplos

We slice the buffer with a Span, no copies.

Fatiamos o buffer com um Span, sem cópias.

You can't use a Span in an async method.

Não dá para usar Span em um método async.

Cuidado

Não confunda com List<T> ou array: o Span é só uma visão, e escrever nele altera a memória original.

Origem

Do inglês span, 'vão' ou 'extensão'.

Veja também

Todos os termos de C#