Несколько баллов. Во-первых, я согласен с Джоном Сондерсом об использовании finally
. Тебе действительно нужно там убирать.
Во-вторых, если вы хотите создать новое исключение, просто либо сгенерируйте исключение, либо создайте свой собственный тип исключения на основе Exception
. Я бы порекомендовал сделать это, если вы перехватываете низкоуровневое исключение, такое как ввод-вывод или SQL, и хотите перебросить что-то специфическое для выполняемой операции. В этом случае вы можете захотеть вложить захваченное исключение как InnerException. Ищите перегрузку конструктора, чтобы сделать это легко.
В-третьих, если вы хотите просто перебросить, я думаю, вы можете просто написать «throw», что неявно выбрасывает текущее исключение, которое было перехвачено. По крайней мере, это то, как вы делаете это в C #, что позволяет исключению со всей трассировкой стека и другими данными продолжать пузыриться в стеке без изменений.