Il est parfaitement acceptable d'avoir plusieurs blocs de saisie de types différents. Cependant, le comportement est que le premier bloc candidat gère l'exception.
Il n'entrera pas dans les DEUX blocs catch. Le premier bloc catch qui correspond au type d'exception gérera cette exception spécifique, et pas d'autres, même s'il est renvoyé dans le gestionnaire. Les suivants seront ignorés une fois qu'une exception entre dans un bloc catch.
Afin d'avoir une exception pris dans les deux blocs, vous devez soit des blocs de nid comme si:
try
{
try
{
// Do something that throws ArithmeticException
}
catch(ArithmeticException arithException)
{
// This handles the thrown exception....
throw; // Rethrow so the outer handler sees it too
}
}
catch (Exception e)
{
// This gets hit as well, now, since the "inner" block rethrew the exception
}
Alternativement, vous pouvez filtrer dans un gestionnaire d'exception générique en fonction du type d'exception spécifique.
L'imbrication fonctionne bien pour les hiérarchies simples à un seul niveau, mais peut s'avérer très difficile si vous avez un code partagé qui doit s'exécuter dans plusieurs cas d'exception. Ce n'est pas un désaccord avec l'approche, mais une observation que ce n'est pas toujours approprié. – tvanfosson
@tvanfosson: Oui, c'est pourquoi j'ai aussi ajouté l'option de filtrage. Votre option est très belle aussi. –