Подтвердить что ты не робот

Могу ли я удалить пустой улов с броском?

Я надеюсь, что это просто. Я работаю над большой базой кода, общее качество хорошее, но иногда вы получаете некоторые из них:

try
{
   // Calls a .NET remoting method.
}
catch
{
   throw;
}

Обратите внимание, что окончательной логики нет, и catch не указывает никаких исключений или делает что-либо, кроме того, что я предоставил выше. Тем не менее, я знаю, что улов и повторное броски могут изменять стек вызовов в деталях исключения. Я не уверен в том, что это поведение происходит именно из-за вызова удаленной .NET.

Безопасно ли удалить эту попытку? Насколько я могу судить, это так, но я думал, что сначала попробую проверить какое-то странное поведение.

4b9b3361

Ответ 1

Насколько я знаю, catch (Exception ex) { throw ex } сбрасывает трассировку стека. И просто catch { throw; } не делает.

Итак, если вы не выполните никакой дополнительной логики при ошибке, например. logging, я не знаю причин, чтобы не удалить этот улов.

Ответ 2

Повторяя, как вы показали, не следует менять стек вызовов, если нет особого особого для удаления исключений. (Я знаю, что есть некоторые особые аспекты, но я не думаю, что они вступают в игру здесь.) Это то, что потеряет информацию:

catch(Exception e)
{
    throw e; // Not throw;
}

Я предполагаю, что какой-то разработчик включил это только для того, чтобы поставить точку останова на строку throw. Я бы избавился от него.

Ответ 3

В определенных ситуациях, связанных с безопасностью доступа к коду, предложение catch-rethrow может быть необходимой функцией безопасности. Но я сомневаюсь, что это применимо здесь. Тем более, что ни один здравомыслящий человек не использовал этот шаблон без добавления комментария.

Точка зрения заключается в том, чтобы предотвратить использование фильтров исключений при увеличении привилегий.

Несколько связанных статей:

http://blogs.msdn.com/b/shawnfa/archive/2005/03/31/404320.aspx
http://msdn.microsoft.com/en-us/library/8cd7yaws(v=VS.100).aspx
http://www.pluralsight-training.net/community/blogs/keith/archive/2005/03/31/7149.aspx


Кажется, устарел, поскольку .net 2:
Фильтры олицетворения и исключения в версии 2.0