Было бы лучше сделать это вместо этого?
Вы бы лучше с несколькими использованием блоков.
Во-первых, ваши блоки улова сожрут все исключения и не нужны (можно попробовать ... наконец-то без каких-либо уловов). Используйте catch только в том случае, если вы можете обработать (или добавить значение) исключение.
Но лучше:
using (var resA = GetMeAResourceNeedingCleanUp())
using (var resB = new AnotherResourceNeedingCleanUpn(...)) {
// Code that might throw goes in here.
}
NB. Как только исключение возвращается, и, наконец, блоки очищаются, создание другого исключения может привести (в лучшем случае) к путанице в отношении того, что обрабатывается. Это второе руководство:
НЕ выбрасывать исключения из методов Dispose или финализаторов. Если вам нужно разрешить пользователям обрабатывать ошибки очистки, предоставьте отдельный метод Close, который может сообщать о его сбое.
Обратите внимание, что "Руководство по разработке структуры" (2 и ed) имеет это как (§9.4.1):
AVOID выдает исключение изнутри Dispose (bool) за исключением критических
ситуации, когда содержащий процесс был поврежден (утечки, противоречивые
общее состояние и т. д.).