🧩 Exercícios: Estruturas Repetitivas (while, for, foreach) e Spans
Spec Sistemas Csharp • Trilha Progressiva em 4 Níveis
🧭 Navegação Pedagógica
-
📖 Teoria do Capítulo 💻 Exemplos 📊 Slides 🧠 Quiz
🎯 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:
- 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)
- Salve o arquivo como:
Atividade_04_1_SeuNome - 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
Requisitos de Execução:
- 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)
- Salve o arquivo como:
Atividade_04_2_SeuNome - 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
Requisitos de Execução:
- 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)
- Salve o arquivo como:
Atividade_04_3_SeuNome - 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:
- 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)
- Salve o arquivo como:
Atividade_04_4_SeuNome - 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 |