La gestió d'excepcions és una part fonamental de la programació en C#. Les excepcions són errors que es produeixen durant l'execució d'un programa. En aquest tema, aprendrem com manejar aquestes excepcions per evitar que el nostre programa es bloquegi inesperadament.
Conceptes Clau
- Excepcions: Errors que es produeixen durant l'execució del programa.
- Try-Catch: Blocs de codi utilitzats per capturar i manejar excepcions.
- Finally: Bloc de codi que s'executa sempre, independentment de si es produeix una excepció o no.
- Throw: Instrucció utilitzada per llançar una excepció.
Try-Catch
El bloc try-catch s'utilitza per capturar excepcions i manejar-les de manera adequada. La sintaxi bàsica és la següent:
try
{
// Codi que pot produir una excepció
}
catch (Exception ex)
{
// Codi per manejar l'excepció
Console.WriteLine(ex.Message);
}Exemple Pràctic
using System;
class Program
{
static void Main()
{
try
{
int[] numbers = { 1, 2, 3 };
Console.WriteLine(numbers[5]); // Això produirà una excepció
}
catch (IndexOutOfRangeException ex)
{
Console.WriteLine("S'ha produït una excepció: " + ex.Message);
}
}
}En aquest exemple, intentem accedir a un índex que no existeix en l'array, la qual cosa produeix una excepció IndexOutOfRangeException. El bloc catch captura aquesta excepció i mostra un missatge a la consola.
Finally
El bloc finally s'utilitza per executar codi que ha de córrer independentment de si es produeix una excepció o no. És útil per alliberar recursos, tancar fitxers, etc.
Exemple Pràctic
using System;
using System.IO;
class Program
{
static void Main()
{
StreamReader reader = null;
try
{
reader = new StreamReader("file.txt");
Console.WriteLine(reader.ReadToEnd());
}
catch (FileNotFoundException ex)
{
Console.WriteLine("Fitxer no trobat: " + ex.Message);
}
finally
{
if (reader != null)
{
reader.Close();
}
}
}
}En aquest exemple, el bloc finally s'assegura que el fitxer es tanca, independentment de si es produeix una excepció o no.
Throw
La instrucció throw s'utilitza per llançar una excepció. Això pot ser útil per crear les teves pròpies excepcions personalitzades.
Exemple Pràctic
using System;
class Program
{
static void Main()
{
try
{
ValidateAge(15);
}
catch (ArgumentException ex)
{
Console.WriteLine("Error: " + ex.Message);
}
}
static void ValidateAge(int age)
{
if (age < 18)
{
throw new ArgumentException("L'edat ha de ser almenys 18.");
}
}
}En aquest exemple, la funció ValidateAge llança una excepció ArgumentException si l'edat és menor de 18.
Exercicis Pràctics
Exercici 1
Escriu un programa que demani a l'usuari que introdueixi dos números i mostri la seva divisió. Utilitza blocs try-catch per manejar possibles excepcions com la divisió per zero.
Solució
using System;
class Program
{
static void Main()
{
try
{
Console.Write("Introdueix el primer número: ");
int num1 = int.Parse(Console.ReadLine());
Console.Write("Introdueix el segon número: ");
int num2 = int.Parse(Console.ReadLine());
int result = num1 / num2;
Console.WriteLine("El resultat és: " + result);
}
catch (DivideByZeroException ex)
{
Console.WriteLine("Error: No es pot dividir per zero.");
}
catch (FormatException ex)
{
Console.WriteLine("Error: Entrada no vàlida.");
}
}
}Exercici 2
Crea una funció que llegeixi un fitxer de text i mostri el seu contingut. Utilitza blocs try-catch-finally per manejar possibles excepcions com FileNotFoundException i assegurar-te que el fitxer es tanca correctament.
Solució
using System;
using System.IO;
class Program
{
static void Main()
{
ReadFile("example.txt");
}
static void ReadFile(string filePath)
{
StreamReader reader = null;
try
{
reader = new StreamReader(filePath);
Console.WriteLine(reader.ReadToEnd());
}
catch (FileNotFoundException ex)
{
Console.WriteLine("Fitxer no trobat: " + ex.Message);
}
catch (Exception ex)
{
Console.WriteLine("S'ha produït un error: " + ex.Message);
}
finally
{
if (reader != null)
{
reader.Close();
}
}
}
}Resum
En aquesta secció, hem après com manejar excepcions en C# utilitzant blocs try-catch, finally i la instrucció throw. La gestió d'excepcions és crucial per crear aplicacions robustes i fiables. Hem vist exemples pràctics i hem realitzat exercicis per reforçar els conceptes apresos. Ara estem preparats per avançar al següent tema del curs.
Curs de Programació en C#
Mòdul 1: Introducció al C#
- Introducció al C#
- Configuració de l'Entorn de Desenvolupament
- Programa Hello World
- Sintaxi i Estructura Bàsica
- Variables i Tipus de Dades
Mòdul 2: Estructures de Control
Mòdul 3: Programació Orientada a Objectes
Mòdul 4: Conceptes Avançats de C#
- Interfícies
- Delegats i Esdeveniments
- Genèrics
- Col·leccions
- LINQ (Consulta Integrada al Llenguatge)
- Programació Asíncrona
Mòdul 5: Treballant amb Dades
Mòdul 6: Temes Avançats
- Reflexió
- Atributs
- Programació Dinàmica
- Gestió de Memòria i Recollida d'Escombraries
- Multifil i Programació Paral·lela
Mòdul 7: Construcció d'Aplicacions
Mòdul 8: Millors Pràctiques i Patrons de Disseny
- Estàndards de Codificació i Millors Pràctiques
- Patrons de Disseny
- Proves Unitàries
- Revisió de Codi i Refactorització
