Следующий код проблематичен, поскольку он перезаписывает исходную трассировку стека для e
, что затрудняет диагностику проблем:
public void Foo() {
try {
Bar();
} catch(Exception e) {
throw e; // re-throw; overwrites original stacktrace in 'e'
}
}
В следующем коде нет вышеуказанной проблемы с перезаписью stacktrace, но все еще неоправданно подробно:
public void Foo() {
try {
Bar();
} catch(Exception e) {
throw; // re-throw; preserves original stacktrace in 'e'
}
}
Обе были бы лучше написаны, как показано ниже. Это связано с тем, что если единственное, что вы делаете в блоке перехвата, это перебрасывает исключение, нет необходимости вообще писать блок перехвата:
public void Foo() {
Bar();
}