TP4 : La gestion des
exceptions et Les
énumérations
1. Les exceptions
De nombreuses fonctions C# sont susceptibles de générer des exceptions, c'est à dire des
erreurs. Lorsqu'une fonction est susceptible de générer une exception, le programmeur
devrait la gérer dans le but d'obtenir des programmes plus résistants aux erreurs : il faut
toujours éviter le "plantage" sauvage d'une application.
La gestion d'une exception se fait selon le schéma suivant :
e est un objet de type Exception ou dérivé. On peut être plus précis en utilisant des types tels
que IndexOutOfRangeException, FormatException, SystemException, etc… : il existe plusieurs
types d'exceptions. En écrivant catch (Exception e), on indique qu'on veut gérer toutes les
types d'exceptions. Si le code de la clause try est susceptible de générer plusieurs types
d'exceptions, on peut vouloir être plus précis en gérant l'exception avec plusieurs clauses
catch. On peut ajouter même aux clauses try/catch, une clause finally, qu'il y ait exception ou pas, le
code de la clause finally sera toujours exécuté. :
Dans la clause catch, on peut ne pas vouloir utiliser l'objet Exception disponible. Au lieu
d'écrire catch (Exception e){..}, on écrit alors catch(Exception){...} ou plus simplement catch
{...}.
• La classe Exception a une propriété Message qui est un message détaillant l'erreur qui
s'est produite. Ainsi si on veut afficher celui-ci, on écrira :
catch (Exception ex)
{ Console.WriteLine("L'erreur suivante s'est produite : {0}",ex.Message); ... }
• La classe Exception a une méthode ToString qui rend une chaîne de caractères
indiquant le type de l'exception ainsi que la valeur de la propriété Message. On pourra
ainsi écrire :
catch (Exception ex)
{ Console.WriteLine("L'erreur suivante s'est produite : {0}", ex.ToString()); ... }
On peut écrire aussi :
catch (Exception ex)
{ Console.WriteLine("L'erreur suivante s'est produite : {0}",ex); ... }
2. Les énumérations
Une énumération est un type de données dont le domaine de valeurs est un ensemble de
constantes entières.
enum variable { const1, const2, const3, const4, const5 };
De façon interne, ces cinq constantes sont codées par des entiers consécutifs commençant
par 0 pour la première constante, 1 pour la suivante, etc.
On peut obtenir toutes les valeurs de l'énumération :
foreach (Mentions m in Enum.GetValues(maMention.GetType())) {
Console.WriteLine(m); }
3. Exercices applicatifs
1. Écrire un programme dans lequel on demande à l’utilisateur de saisir un entier en
gérant l’exception dans le cas où il ne saisit pas un entier correctement.
2. Écrire un programme dans lequel on demande à l’utilisateur de saisir un entier en
gérant l’exception dans le cas où il ne saisit pas un entier correctement en lui
demandant de refaire la saisie.
3. Écrire un programme dans lequel on demande à l’utilisateur de saisir sa date de
naissance en gérant l’exception dans le cas où il ne saisit pas une date valide en lui
demandant de refaire la saisie.
4. Ecrire un programme qui demande à l’utilisateur une date de départ et une date
d’arrivée, générer une exception si la date d’arrivée et inférieure à la date de départ.
5. Construire un programme permettant lorsqu'on lui fournit une date sous la forme
numérique (3/2/5 où 3 indique le n° du jour de la semaine lundi=1, dimanche=7; le
deuxième chiffre 2 indique le jour, enfin le troisième chiffre 5 indique le n° du mois) la
convertit en clair (3/2/5 est converti en : mercredi 2 mai).