È perfettamente accettabile disporre di più blocchi di cattura di tipi diversi. Tuttavia, il comportamento è che il primo blocco candidato gestisce l'eccezione.
Non inserirà ENTRAMBI i blocchi di cattura. Il primo blocco catch che corrisponde al tipo di eccezione gestirà quell'eccezione specifica e nessun'altra, anche se è stata riscritta nel gestore. Tutti quelli successivi verranno saltati quando un'eccezione entra in un blocco catch.
Al fine di avere un'eccezione catturati in entrambi i blocchi, si avrebbe bisogno di entrambi i blocchi nido in questo modo:
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
}
In alternativa, è possibile filtrare in un gestore di eccezioni generica in base al tipo specifico di eccezione.
fonte
2010-10-27 16:33:14
L'annidamento funziona correttamente per gerarchie semplici a un livello, ma può essere brutto se si dispone di codice condiviso che deve essere eseguito per diversi casi di eccezione. Questo non è un disaccordo con l'approccio, ma un'osservazione che non è sempre appropriato. – tvanfosson
@tvanfosson: Sì, ecco perché ho anche aggiunto l'opzione di filtro. Anche la tua opzione è molto carina. –