Prévia do material em texto
Lista 20 – Namespaces e Tratamento de Erros com try-catch em C#
Esta lista apresenta o uso de namespaces e o tratamento de exceções em C#. São explorados blocos `try-catch`, `finally`, e o uso de `throw` para lançar exceções. Também é introduzida a organização de código com namespaces.
Enunciados
1. Crie um programa que divide dois números. Use `try-catch` para tratar divisão por zero.
2. Crie um programa que converte uma string em inteiro. Use `try-catch` para tratar conversões inválidas.
3. Crie um método que acessa um índice fora dos limites de um vetor. Trate a exceção com `try-catch`.
4. Crie uma calculadora simples com `try-catch` para proteger contra exceções inesperadas.
5. Crie uma classe `Pessoa` dentro de um namespace `Sistema.Entidades`. Instancie essa classe no `Main`.
6. Crie um namespace `Utilitarios` com uma classe `Conversor` e método `ConverterParaInt()`.
7. Crie um programa com `try-catch-finally` que sempre exiba “Programa encerrado” no `finally`.
8. Crie uma função que lança uma exceção personalizada com `throw new Exception()`. Trate-a no `Main`.
9. Crie dois namespaces `Empresa.A` e `Empresa.B`, cada um com uma classe `Funcionario`. Use ambas no `Main`.
10. Crie uma divisão dentro de um método e trate erro com `try-catch`, informando o erro na tela.
Soluções em C#
Exercício 1
using System;
class Program
{
static void Main()
{
try
{
int a = 10, b = 0;
Console.WriteLine(a / b);
}
catch (DivideByZeroException)
{
Console.WriteLine("Erro: Divisão por zero.");
}
}
}
Exercício 2
using System;
class Program
{
static void Main()
{
try
{
string entrada = "abc";
int valor = int.Parse(entrada);
}
catch (FormatException)
{
Console.WriteLine("Erro: Entrada inválida para conversão.");
}
}
}
Exercício 3
using System;
class Program
{
static void Main()
{
try
{
int[] numeros = { 1, 2, 3 };
Console.WriteLine(numeros[5]);
}
catch (IndexOutOfRangeException)
{
Console.WriteLine("Erro: Índice fora do limite do vetor.");
}
}
}
Exercício 4
using System;
class Calculadora
{
public static void Calcular()
{
try
{
int a = 5, b = 0;
Console.WriteLine("Resultado: " + (a / b));
}
catch (Exception e)
{
Console.WriteLine("Erro inesperado: " + e.Message);
}
}
}
class Program
{
static void Main()
{
Calculadora.Calcular();
}
}
Exercício 5
using System;
using Sistema.Entidades;
namespace Sistema.Entidades
{
public class Pessoa
{
public string Nome = "Carlos";
}
}
class Program
{
static void Main()
{
Pessoa p = new Pessoa();
Console.WriteLine("Nome: " + p.Nome);
}
}
Exercício 6
using System;
using Utilitarios;
namespace Utilitarios
{
public class Conversor
{
public static int ConverterParaInt(string texto)
{
return int.Parse(texto);
}
}
}
class Program
{
static void Main()
{
try
{
int numero = Conversor.ConverterParaInt("123");
Console.WriteLine("Número convertido: " + numero);
}
catch (FormatException)
{
Console.WriteLine("Erro na conversão.");
}
}
}
Exercício 7
using System;
class Program
{
static void Main()
{
try
{
int x = int.Parse("10");
}
catch
{
Console.WriteLine("Erro ao converter.");
}
finally
{
Console.WriteLine("Programa encerrado.");
}
}
}
Exercício 8
using System;
class Program
{
static void LancaErro()
{
throw new Exception("Erro personalizado lançado!");
}
static void Main()
{
try
{
LancaErro();
}
catch (Exception e)
{
Console.WriteLine("Exceção capturada: " + e.Message);
}
}
}
Exercício 9
using System;
using Empresa.A;
using Empresa.B;
namespace Empresa.A
{
public class Funcionario
{
public string Nome = "Alice de A";
}
}
namespace Empresa.B
{
public class Funcionario
{
public string Nome = "Bruno de B";
}
}
class Program
{
static void Main()
{
Empresa.A.Funcionario f1 = new Empresa.A.Funcionario();
Empresa.B.Funcionario f2 = new Empresa.B.Funcionario();
Console.WriteLine(f1.Nome);
Console.WriteLine(f2.Nome);
}
}
Exercício 10
using System;
class Program
{
static void Dividir(int x, int y)
{
try
{
Console.WriteLine(x / y);
}
catch (DivideByZeroException e)
{
Console.WriteLine("Erro: " + e.Message);
}
}
static void Main()
{
Dividir(10, 0);
}
}