C# · Avançado · Inglês · Técnico
Span
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]); // 99Exemplos
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'.