ExpertiDict

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

ref struct

/rɛf strʌkt/substantivo

Struct restrita à pilha, que não pode ser campo de classe, ser boxeada nem atravessar um await; é o que permite a tipos como Span<T> apontar para memória com segurança.

Onde usar

Você as escreve em parsers e buffers de alto desempenho, e as reconhece por erros como 'não pode ser usado em lambda' ao capturar um Span. A saída costuma ser usar Memory<T> ou reorganizar o código.

Em código

ref struct Janela {
  private readonly Span<int> _d;
  public Janela(Span<int> d) => _d = d;
  public int Soma() {
    int s = 0;
    foreach (var x in _d) s += x;
    return s;
  }
}

Exemplos

Span is a ref struct, so it can't be a field in a class.

Span é uma ref struct, então não pode ser campo de uma classe.

You can't capture a ref struct in a lambda.

Você não pode capturar uma ref struct em uma lambda.

Cuidado

Não use ref struct quando o dado precisar ficar em campo de classe ou sobreviver a um await; use uma struct normal ou Memory<T>.

Veja também

Todos os termos de C#