Gestion des erreurs en C# : try/catch et bien plus de A à Z

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Gestion des erreurs en C# : try/catch et bien plus : de A à Z



Toute application, même écrite par le développeur le plus expérimenté, peut rencontrer des situations imprévues : panne réseau, fichier manquant sur le disque, division par zéro ou saisie de données incorrecte. En C# (.NET), le mécanisme des exceptions est utilisé pour gérer ces situations. Dans cet article, nous aborderons tout ce qu'il faut savoir sur la gestion des erreurs : de la construction de base try/catch à la création de vos propres types d'exceptions et aux bonnes pratiques modernes.



1. Les bases : la construction try/catch/finally



En C#, la gestion des erreurs s'articule autour de trois blocs clés : try, catch et finally.



  • try — contient le code qui peut lever une exception.
  • catch — intercepte et traite une exception spécifique.
  • finally — s'exécute toujours, qu'il y ait eu une exception ou non (généralement pour libérer des ressources).


try{    int[] numbers = { 1, 2, 3 };    Console.WriteLine(numbers[5]); // IndexOutOfRangeException}catch (IndexOutOfRangeException ex){    Console.WriteLine($"Erreur : {ex.Message}");}finally{    Console.WriteLine("Le bloc finally s'exécute toujours.");}


Vous pouvez utiliser plusieurs blocs catch pour différents types d'exceptions. Le traitement se fait de haut en bas, donc les exceptions les plus spécifiques doivent être placées avant les exceptions générales.



try{    // code dangereux}catch (DivideByZeroException ex){    Console.WriteLine("Division par zéro !");}catch (Exception ex) // interception générale{    Console.WriteLine($"Une erreur s'est produite : {ex.Message}");}


2. Génération d'exceptions : l'opérateur throw



Parfois, vous devez signaler explicitement une situation incorrecte. Pour cela, on utilise l'opérateur throw. Vous pouvez lever une exception standard ou une exception personnalisée.



public void ValidateAge(int age){    if (age < 0 || age > 150)    {        throw new ArgumentOutOfRangeException(nameof(age), "L'âge doit être compris entre 0 et 150.");    }    Console.WriteLine("Âge correct.");}


Il existe également la construction throw; (sans arguments) — elle est utilisée à l'intérieur d'un bloc catch pour relancer la même exception. Cela est utile lorsque vous souhaitez journaliser l'erreur sans la supprimer.



try{    // code}catch (Exception ex){    Log.Error(ex); // écriture dans le journal    throw;         // relance — l'exception continue sa propagation}


3. Création d'exceptions personnalisées (Custom Exceptions)



Pour la logique métier, il est souvent plus pratique d'utiliser vos propres types d'exceptions. Cela rend le code plus lisible et permet de traiter précisément les erreurs spécifiques.



Règles pour créer une exception personnalisée :

  • Hériter de la classe Exception (ou de ApplicationException, mais il est préférable d'hériter de Exception).
  • Implémenter trois constructeurs standards (sans paramètres, avec message, avec message et exception interne).
  • Il est recommandé d'ajouter le suffixe Exception au nom de la classe.


public class UserNotFoundException : Exception{    public UserNotFoundException() { }

public UserNotFoundException(string message) : base(message) { }

public UserNotFoundException(string message, Exception inner) : base(message, inner) { }}

// Utilisationthrow new UserNotFoundException("Utilisateur avec l'ID 123 introuvable.");


4. Bonnes pratiques : comment ne pas nuire à vous-même et au projet



La gestion des erreurs ne consiste pas simplement à tout envelopper dans un try/catch. Voici quelques règles d'or à respecter en C# (.NET) :

\

Blogs

Book Recommendations