Sobes.tech
Middle

Y a-t-il une différence dans l'ordre d'écriture des blocs catch?

sobes.tech IA

Réponse de l'IA

Oui, il y en a. Les blocs catch sont traités séquentiellement. Les exceptions plus spécifiques doivent venir avant les plus générales.

try
{
    // Code pouvant générer une exception
}
// Exception plus spécifique
catch (System.FormatException ex)
{
    // Gestion de l'erreur de format
}
// Exception moins spécifique
catch (System.Exception ex)
{
    // Gestion de toutes les autres exceptions
}

Si vous placez l'exception plus générale en premier, alors le bloc catch plus spécifique ne sera jamais atteint pour les exceptions héritant de la plus générale. Par exemple, FormatException hérite de Exception. Si catch (Exception ex) est en premier, il attrapera aussi FormatException.

Séquence incorrecte :

try
{
    // Code pouvant générer une exception
}
// Exception générale
catch (System.Exception ex)
{
    // Gestion de toutes les exceptions, y compris FormatException
}
// Ce bloc ne sera jamais atteint pour FormatException,
// car il est déjà attrapé par le bloc précédent
catch (System.FormatException ex)
{
    // Ce code est inatteignable dans ce cas
}

Le compilateur C# émettra un avertissement ou une erreur pour un bloc catch inatteignable.