Перебрасывание исключений

Это один из моих любимых вопросов для интервью — меня часто удивляет количество кандидатов, которые ошибаются. Посмотрим, как у тебя дела.

В чем разница между следующими фрагментами кода?

try
{
    DoSomething();
}
catch (SomeException ex)
{
    throw ex;
}
try
{
    DoSomething();
}
catch (SomeException ex)
{
    throw;
}

Ответ заключается в том, что первый фрагмент уничтожает трассировку стека для исключения, в то время как второй фрагмент сохраняет его нетронутым. Это может быть настоящей болью при попытке отследить конкретную проблему — в этом случае файлы журнала будут указывать на строку кода, в которой вы повторно генерируете исключение, а не на строку, где происходит исходное исключение. Поэтому всегда используйте второй фрагмент кода.

Удачного кодирования.

Author: admin

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *