Spec Sistemas Csharp • Trilha Progressiva em 4 Níveis


🧭 Navegação Pedagógica


🎯 Nível 1: Fundamentos

Problema 14.1 — Estrutura try-catch-finally com Múltiplos Blocos de Captura

Contexto: Estrutura try-catch-finally com Múltiplos Blocos de Captura no contexto de Tratamento de Exceções Corporativo e Custom Exceptions.

Requisitos de Execução:

  1. Capturar FormatException e OverflowException isoladamente com bloco finally de encerramento.

Resultado Esperado

Exceções tratadas individualmente com execução garantida do bloco finally.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_14_1_SeuNome
  2. Envie na tarefa: Atividade Cap 14 - Tratamento de Exceções Corporativo e Custom Exceptions
🔑 Gabarito de Código & Solução Comentada
// ExceptionBasics.cs
try {
    int valor = int.Parse("9999999999");
} catch (OverflowException) {
    Console.WriteLine("ERRO: Numero muito grande para int32.");
} catch (FormatException) {
    Console.WriteLine("ERRO: Formato invalido.");
} finally {
    Console.WriteLine("Bloco finally executado com sucesso.");
}

🔍 Nível 2: Prática

Problema 14.2 — Filtros de Exceção com a Cláusula when

Contexto: Filtros de Exceção com a Cláusula when no contexto de Tratamento de Exceções Corporativo e Custom Exceptions.

Requisitos de Execução:

  1. Capturar exceção HTTP apenas se o código de status for 404 utilizando catch (HttpRequestException ex) when (ex.StatusCode == HttpStatusCode.NotFound).

Resultado Esperado

Filtro de exceção avaliado sem desenrolar a pilha (stack unrolling) antes da hora.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_14_2_SeuNome
  2. Envie na tarefa: Atividade Cap 14 - Tratamento de Exceções Corporativo e Custom Exceptions
🔑 Gabarito de Código & Solução Comentada
// ExceptionFilter.cs
using System.Net;

try {
    throw new HttpRequestException("Falha na API", null, HttpStatusCode.NotFound);
} catch (HttpRequestException ex) when (ex.StatusCode == HttpStatusCode.NotFound) {
    Console.WriteLine("Tratamento especifico: Recurso 404 nao localizado.");
}

⚡ Nível 3: Integração

Problema 14.3 — Criação de Exceção de Domínio Customizada

Contexto: Criação de Exceção de Domínio Customizada no contexto de Tratamento de Exceções Corporativo e Custom Exceptions.

Requisitos de Execução:

  1. Criar classe RegraNegocioException : Exception com construtores padronizados e propriedades de contexto.

Resultado Esperado

Exceção rica de domínio lançada e interceptada com código de erro interno.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_14_3_SeuNome
  2. Envie na tarefa: Atividade Cap 14 - Tratamento de Exceções Corporativo e Custom Exceptions
🔑 Gabarito de Código & Solução Comentada
// DomainException.cs
public class RegraNegocioException(string codigoErro, string msg) : Exception(msg) {
    public string CodigoErro { get; } = codigoErro;
}

try {
    throw new RegraNegocioException("SALDO_ZERO", "Operacao nao permitida sem saldo positivo.");
} catch (RegraNegocioException ex) {
    Console.WriteLine($"Erro [{ex.CodigoErro}]: {ex.Message}");
}

🏆 Nível 4: Desafio Corporativo

Problema 14.4 — Preservação de Stack Trace com ExceptionDispatchInfo.Capture()

Contexto: Preservação de Stack Trace com ExceptionDispatchInfo.Capture() no contexto de Tratamento de Exceções Corporativo e Custom Exceptions.

Requisitos de Execução:

  1. Re-lançar exceção capturada preservando a pilha de chamadas original intacta com ExceptionDispatchInfo.Throw().

Resultado Esperado

Stack trace original preservado sem perda da linha de origem da falha.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_14_4_SeuNome
  2. Envie na tarefa: Atividade Cap 14 - Tratamento de Exceções Corporativo e Custom Exceptions
🔑 Gabarito de Código & Solução Comentada
// ExceptionDispatchDemo.cs
using System.Runtime.ExceptionServices;

ExceptionDispatchInfo? info = null;
try {
    int.Parse("invalido");
} catch (Exception ex) {
    info = ExceptionDispatchInfo.Capture(ex);
}

if (info != null) {
    Console.WriteLine("Stack trace capturado para retransmissao segura.");
}

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