0Pricing
C# Academy · Aula

Fundamentos de Span/ReadOnlySpan (emulação no C# 6)

Emule Span/ReadOnlySpan com ArraySegment : crie visões sobre matrizes, faça recortes com deslocamento/comprimento e processe dados sem copiá-los.

Fundamentos de Span/ReadOnlySpan (emulação no C# 6) é uma aula grátis de C# Academy no CoddyKit. Esta é a aula 1 de 3. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C# Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C# Academy inclui 3 aulas no total.

Por que as fatias são importantes

Objetivo: trabalhar com fatias sem alocações extras.

  • Use ArraySegment<T> como uma visão
  • Faça fatias por deslocamento e quantidade
  • Escreva métodos que aceitem ArraySegment<T>
  • Mantenha as operações simples e seguras

Visão sem cópia

ArraySegment<T> é uma visão sem cópia sobre parte de uma matriz. Passe-a aos métodos para evitar cópias ao criar fatias.

using System;

public class Program
{
  static int Sum(ArraySegment<int> seg)
  {
    int acc = 0;
    int end = seg.Offset + seg.Count;
    for (int i = seg.Offset; i < end; i++) acc += seg.Array[i];
    return acc;
  }

  public static void Main(string[] args)
  {
    int[] data = new int[] { 2, 4, 6, 8, 10 };
    ArraySegment<int> middle3 = new ArraySegment<int>(data, 1, 3); // 4,6,8
    Console.WriteLine("Sum = " + Sum(middle3)); // 18
  }
}

Fatias aninhadas

Pode criar um pequeno auxiliar de fatiamento para obter um subintervalo de um segmento existente. Ele continuará sem cópia.

using System;

public static class Seg
{
  public static ArraySegment<T> Slice<T>(ArraySegment<T> seg, int start, int count)
  {
    if (start < 0 || count < 0 || start + count > seg.Count) throw new ArgumentOutOfRangeException();
    return new ArraySegment<T>(seg.Array, seg.Offset + start, count);
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    string[] words = new string[] { "alpha", "beta", "gamma", "delta", "epsilon" };
    ArraySegment<string> mid = new ArraySegment<string>(words, 1, 3);  // beta, gamma, delta
    ArraySegment<string> inner = Seg.Slice<string>(mid, 1, 1);         // gamma
    Console.WriteLine(inner.Array[inner.Offset]); // gamma
  }
}

Operação direta por meio da visão

Opere usando deslocamento/quantidade para evitar a criação de subtextos; isso reproduz o aparamento baseado em ReadOnlySpan.

using System;

public static class SegOps
{
  public static ArraySegment<char> Trim(ArraySegment<char> seg)
  {
    int start = seg.Offset;
    int end = seg.Offset + seg.Count - 1;

    while (start <= end && Char.IsWhiteSpace(seg.Array[start])) start++;
    while (end >= start && Char.IsWhiteSpace(seg.Array[end])) end--;

    int newCount = (end >= start) ? (end - start + 1) : 0;
    return new ArraySegment<char>(seg.Array, start, newCount);
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    char[] buf = "   hello world   ".ToCharArray(); // single allocation for chars
    ArraySegment<char> all = new ArraySegment<char>(buf, 0, buf.Length);
    ArraySegment<char> trimmed = SegOps.Trim(all);

    // Print the trimmed part without new string:
    for (int i = 0; i < trimmed.Count; i++)
      Console.Write(trimmed.Array[trimmed.Offset + i]);
    Console.WriteLine();
  }
}

Materialização sob demanda

Às vezes é necessária uma cópia real. Materialize o segmento em uma nova matriz somente na fronteira.

using System;

public static class SegCopy
{
  public static T[] ToArray<T>(ArraySegment<T> seg)
  {
    T[] copy = new T[seg.Count];
    Array.Copy(seg.Array, seg.Offset, copy, 0, seg.Count);
    return copy;
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    int[] data = new int[] { 1, 2, 3, 4, 5, 6 };
    ArraySegment<int> view = new ArraySegment<int>(data, 2, 3); // 3,4,5

    int[] materialized = SegCopy.ToArray<int>(view); // copy only when you must
    Console.WriteLine(string.Join(",", materialized));
  }
}

Dicas e limites

Dicas:

  • Projete APIs que aceitem ArraySegment<T> ao trabalhar com matrizes.
  • Acompanhe o deslocamento e a quantidade.
  • Copie somente nas fronteiras, como E/S e interoperabilidade.
  • A abstração moderna de extensão oferece segurança e visões na pilha; aqui usamos segmentos para aprender a lógica das fatias.

Simulação de fatias no C# 6

Verificação rápida: qual tipo do C# 6 simula melhor uma fatia sem cópia, ou visão, sobre parte de uma matriz?

Recapitulação

Recapitulação: use ArraySegment<T> para visualizar subintervalos, escreva APIs que aceitem segmentos, opere por deslocamento/quantidade e copie somente quando necessário.

Perguntas Frequentes

A aula “Fundamentos de Span/ReadOnlySpan (emulação no C# 6)” é grátis?

Sim — o texto completo de “Fundamentos de Span/ReadOnlySpan (emulação no C# 6)” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C# Academy, atualize para CoddyKit PRO. O curso de C# Academy inclui 3 aulas no total.

O que vou aprender em “Fundamentos de Span/ReadOnlySpan (emulação no C# 6)”?

Emule Span/ReadOnlySpan com ArraySegment : crie visões sobre matrizes, faça recortes com deslocamento/comprimento e processe dados sem copiá-los. Você pratica C# Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C# Academy?

Nenhuma experiência prévia é necessária. C# Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 3.

Quanto tempo leva a aula “Fundamentos de Span/ReadOnlySpan (emulação no C# 6)”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C# Academy?

Sim. Cada aula de C# Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Fundamentos de Span/ReadOnlySpan (emulação no C# 6)
  2. Emulação de Memory/ReadOnlyMemory: janelas sem cópia
  3. APIs de string como Span (emulação no C# 6)
← Voltar para C# Academy