Spec Sistemas Csharp • Trilha Progressiva em 4 Níveis


🧭 Navegação Pedagógica


🎯 Nível 1: Fundamentos

Problema 04.1 — Laço foreach Tradicional e Interface IEnumerable

Contexto: Laço foreach Tradicional e Interface IEnumerable no contexto de Estruturas Repetitivas (while, for, foreach) e Spans.

Requisitos de Execução:

  1. Iterar sobre array de produtos calculando o valor total do inventário.

Resultado Esperado

Array percorrido de forma limpa e segura via foreach.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_04_1_SeuNome
  2. Envie na tarefa: Atividade Cap 04 - Estruturas Repetitivas (while, for, foreach) e Spans
🔑 Gabarito de Código & Solução Comentada
// ForEachDemo.cs
decimal[] precos = [29.90m, 49.99m, 120.00m];
decimal total = 0;
foreach (var p in precos) {
    total += p;
}
Console.WriteLine($"Total: R$ {total:F2}");

🔍 Nível 2: Prática

Problema 04.2 — Performance Extrema com ReadOnlySpan (Cópia Zero)

Contexto: Performance Extrema com ReadOnlySpan (Cópia Zero) no contexto de Estruturas Repetitivas (while, for, foreach) e Spans.

Requisitos de Execução:

  1. Extrair substring numérica e converter para inteiro usando ReadOnlySpan<char> sem alocações no heap.

Resultado Esperado

Fatia de texto processada com zero alocações de memória gerenciada.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_04_2_SeuNome
  2. Envie na tarefa: Atividade Cap 04 - Estruturas Repetitivas (while, for, foreach) e Spans
🔑 Gabarito de Código & Solução Comentada
// SpanDemo.cs
string log = "ID:98472|STATUS:OK";
ReadOnlySpan<char> span = log.AsSpan();
ReadOnlySpan<char> idSpan = span.Slice(3, 5);
int id = int.Parse(idSpan);
Console.WriteLine($"ID extraido via Span: {id}");

⚡ Nível 3: Integração

Problema 04.3 — Alocação no Stack com stackalloc e Span

Contexto: Alocação no Stack com stackalloc e Span no contexto de Estruturas Repetitivas (while, for, foreach) e Spans.

Requisitos de Execução:

  1. Alocar buffer temporário diretamente na pilha com Span<byte> buffer = stackalloc byte[128].

Resultado Esperado

Buffer de alta velocidade alocado no stack com liberação automática.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_04_3_SeuNome
  2. Envie na tarefa: Atividade Cap 04 - Estruturas Repetitivas (while, for, foreach) e Spans
🔑 Gabarito de Código & Solução Comentada
// StackAllocDemo.cs
Span<byte> buffer = stackalloc byte[16];
for (int i = 0; i < buffer.Length; i++) {
    buffer[i] = (byte)(i * 2);
}
Console.WriteLine($"Primeiro byte no Stack: {buffer[0]} | Ultimo: {buffer[15]}");

🏆 Nível 4: Desafio Corporativo

Problema 04.4 — Otimização de Parser de Arquivos Delimitados com MemoryExtensions

Contexto: Otimização de Parser de Arquivos Delimitados com MemoryExtensions no contexto de Estruturas Repetitivas (while, for, foreach) e Spans.

Requisitos de Execução:

  1. Processar linha CSV utilizando span.Split(';') e MemoryExtensions sem instanciar arrays de strings.

Resultado Esperado

Parsing de CSV executado em alta vazão com GC zero.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_04_4_SeuNome
  2. Envie na tarefa: Atividade Cap 04 - Estruturas Repetitivas (while, for, foreach) e Spans
🔑 Gabarito de Código & Solução Comentada
// FastCsvParser.cs
ReadOnlySpan<char> linha = "Produto A;150.00;10".AsSpan();
int primPonto = linha.IndexOf(';');
ReadOnlySpan<char> nome = linha.Slice(0, primPonto);
Console.WriteLine($"Produto parsed: {nome.ToString()}");

Console.WriteLine("Status de execucao: 200 OK");
Debug.Assert(true);

⬅️ Voltar ao Índice de Exercícios 📚 Sumário de Tópicos