Using vs Try-Finally
Fait partie de la section Logique & Flux du Journey C# de Coddy — leçon 28 sur 66.
Les instructions using tout comme les blocs try-finally aident à gérer les ressources qui doivent être correctement libérées. L'instruction using offre une manière plus propre et plus concise de s'assurer que les objets IDisposable sont correctement nettoyés.
Remarque : using remplace le modèle try-finally pour la libération des ressources — il ne remplace pas try-catch. Vous pouvez toujours envelopper un bloc using à l'intérieur d'un try-catch pour gérer les exceptions.
Examinons d'abord une approche try-finally :
StreamReader reader = null;
try
{
reader = new StreamReader("file.txt");
string content = reader.ReadToEnd();
Console.WriteLine(content);
}
finally
{
if (reader != null)
{
reader.Dispose();
}
}
L'instruction using simplifie ce code :
using (StreamReader reader = new StreamReader("file.txt"))
{
string content = reader.ReadToEnd();
Console.WriteLine(content);
}
L'instruction using appelle automatiquement Dispose() lorsque le bloc se termine, même si une exception se produit.
Qu'est-ce que StreamReader ?StreamReader est une classe utilisée pour lire du texte à partir de fichiers. Vous en créez une en passant un nom de fichier, et elle ouvre le fichier pour la lecture. Elle implémente IDisposable, elle doit donc être correctement fermée après utilisation — ce qui est exactement ce que using gère pour vous.
Méthodes courantes de StreamReader :
ReadToEnd()— lit l'intégralité du fichier sous forme d'une seule chaîne de caractèresReadLine()— lit une ligne à la fois, retournenulllorsque la fin du fichier est atteinte
Pour compter les lignes d'un fichier, vous pouvez utiliser une boucle ReadLine() :
using (StreamReader reader = new StreamReader("file.txt"))
{
int lineCount = 0;
while (reader.ReadLine() != null)
{
lineCount++;
}
Console.WriteLine(lineCount);
}
Vous pouvez également combiner using avec try-catch pour gérer les exceptions comme un fichier manquant :
try
{
using (StreamReader reader = new StreamReader("file.txt"))
{
int lineCount = 0;
while (reader.ReadLine() != null)
{
lineCount++;
}
Console.WriteLine(lineCount);
}
}
catch (FileNotFoundException)
{
Console.WriteLine("File not found");
}
Défi
FacileCréez une méthode nommée processFile qui :
- Prend un nom de fichier comme paramètre de type chaîne de caractères
- Utilise l'instruction
usingavec unStreamReaderpour lire toutes les lignes du fichier - Retourne le nombre de lignes dans le fichier
- Si une
FileNotFoundExceptionse produit, affiche "File not found" et retourne -1
Essayez vous-même
using System;
using System.IO;
class ProcessFile
{
public static int processFile(string filename)
{
// Écrivez votre code ici
}
}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