Debido
try {
File.Open("FileNotFound.txt", FileMode.Open);
} catch {
throw;
}
no es diferente a
File.Open("FileNotFound.txt", FileMode.Open);
Si la llamada a File.Open(string, FileMode)
falla, ya sea en la muestra exactamente la misma excepción encontrarán su camino hasta a la IU.
En la cláusula anterior catch
, simplemente está capturando y volviendo a lanzar una excepción sin hacer nada más, como el registro, la anulación de una transacción, el ajuste de la excepción para agregar información adicional o cualquier otra cosa.
Sin embargo,
try {
File.Open("FileNotFound.txt", FileMode.Open);
} catch(Exception ex) {
GetLogger().LogException(ex);
throw;
}
no contendría ningún despido y ReSharper no debería quejarse. Del mismo modo,
try {
File.Open("FileNotFound.txt", FileMode.Open);
} catch(Exception ex) {
throw new MyApplicationException(
"I'm sorry, but your preferences file could not be found.", ex);
}
no sería redundante.
Tener un catch-and-rethrow no es lo mismo que no tener catch. Los filtros de excepción para cada bloque catch entre un sitio throw y la primera captura exitosa se ejecutarán antes de que se ejecute cualquier bloque 'finally'; un catch-and-rethrow hará que todos los bloques 'finally' dentro de él se ejecuten antes de que se ejecuten los filtros de excepción fuera de él. Por cierto, ¿está satisfecho el reafilar si seguir un catch-and-rethrow es otro bloque catch más general que hace algo (por lo que el catch-and-rethrow serviría para eludir el último bloque de catch)? – supercat