Le bloc Finally
Fait partie de la section Logique & Flux du Journey C# de Coddy — leçon 27 sur 66.
Le bloc finally contient du code qui s'exécute toujours, qu'une exception se produise ou non, même s'il y a une instruction return dans les blocs try ou catch.
Créez une structure try-catch-finally de base :
try
{
// Code that might throw an exception
int result = 10 / 2;
Console.WriteLine("Result: " + result);
}
catch (DivideByZeroException ex)
{
// Code that handles the exception
Console.WriteLine("Cannot divide by zero: " + ex.Message);
}
finally
{
// Code that always executes
Console.WriteLine("This always executes");
}
Le bloc finally est utile pour les tâches de nettoyage comme la fermeture de fichiers ou de connexions à une base de données :
System.IO.StreamReader file = null;
try
{
file = new System.IO.StreamReader("data.txt");
string content = file.ReadToEnd();
Console.WriteLine(content);
}
catch (System.IO.FileNotFoundException)
{
Console.WriteLine("File not found.");
}
finally
{
// Toujours fermer le fichier, même si une exception s'est produite
if (file != null)
{
file.Close();
}
}
Défi
FacileCréez une méthode nommée ProcessData qui :
- Prend un paramètre de type chaîne de caractères représentant un nom de fichier
- Tente d'ouvrir le fichier et de lire son contenu
- Écrit le contenu dans la console
- Nettoie correctement les ressources en utilisant un bloc finally
- Gère les exceptions FileNotFoundException et IOException
Si le fichier est introuvable, affichez : "ERROR: File not found: [filename]"
Si une autre erreur d'E/S se produit, affichez : "ERROR: Could not read the file: [error message]"
Affichez toujours "File operation completed." dans le bloc finally, qu'une exception se soit produite ou non.
Aide-mémoire
Le bloc finally contient du code qui s'exécute toujours, qu'une exception se produise ou non, même s'il y a une instruction return dans les blocs try ou catch.
Structure try-catch-finally de base :
try
{
// Code qui pourrait lever une exception
int result = 10 / 2;
Console.WriteLine("Result: " + result);
}
catch (DivideByZeroException ex)
{
// Code qui gère l'exception
Console.WriteLine("Cannot divide by zero: " + ex.Message);
}
finally
{
// Code qui s'exécute toujours
Console.WriteLine("This always executes");
}
Le bloc finally est utile pour les tâches de nettoyage comme la fermeture de fichiers ou de connexions à une base de données :
System.IO.StreamReader file = null;
try
{
file = new System.IO.StreamReader("data.txt");
string content = file.ReadToEnd();
Console.WriteLine(content);
}
catch (System.IO.FileNotFoundException)
{
Console.WriteLine("File not found.");
}
finally
{
// Toujours fermer le fichier, même si une exception s'est produite
if (file != null)
{
file.Close();
}
}
Essayez vous-même
using System;
using System.IO;
class Program
{
public static void ProcessData(string filename)
{
// Écrivez votre code ici
}
static void Main(string[] args)
{
string filename = Console.ReadLine();
ProcessData(filename);
}
}Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logique & Flux
1Tableaux multidimensionnels
Bases des tableaux 2DDéclaration et initialisation en 2DAccès aux éléments d'un tableau 2DBoucles imbriquées et tableaux 2DTableaux irréguliersOpérations matricielles courantesRécapitulatif - Multidimensionnel4Techniques de contrôle de flux
Retours anticipésClauses de gardeInstructions de saut (goto)Break et ContinueAplatir les conditionnelles imbriquées2Prise de décision avancée
Conditions multiplesLogique booléenne complexeComparaison If vs SwitchInstructions Switch imbriquéesRécapitulatif - Décisions avancées5Gestion des exceptions
Bases du Try-CatchTypes d'exceptionsBlocs Catch multiplesManipulation de fichiersLe bloc FinallyUsing vs Try-FinallyExceptions personnaliséesRécapitulatif - Gestion des erreurs3Améliorations des boucles
Performance des bouclesItération de structures complexesChaque type de boucleRefactorisation des bouclesRécapitulatif - Boucles optimisées6Gestion des valeurs nulles
Les bases des références nullesTypes valeur nullablesPatterns de vérification de nullitéProgrammation défensiveRécapitulatif - Null Safety