При создании исключения на основе перехвата другого исключения последнее исключение может быть передано в свойстве InnerException
.
Я выполняю несколько процедур очистки.Даже если произойдет сбой одного из них, я бы хотел запустить все из них (поскольку им может понадобиться убрать временно сохраненные данные).
В то же время я не хочу проглатывать исключения, которые могут возникнутьво время выполнения методов очистки.
Простое решение заключается в том, чтобы заключить каждый вызов очистки в блок try
- catch
и добавить любое пойманное исключение в список.После выполнения всех методов очистки, если бы было хотя бы одно исключение, я мог бы затем выбросить ... что-то:
var exceptions = new List<Exception>();
foreach (var handler in handlers)
{
try
{
handler.CleanUp();
}
catch (Exception ex)
{
exceptions.Add(ex);
}
}
if (exceptions.Count > 0)
{
throw ...
}
Теперь мой вопрос: Есть ли что-нибудь пред-определенный в BCL, который я могу выбросить здесь и который распространяет все перехваченные исключения?
Я имею в виду исключение, которое имеет что-то вроде InnerExceptions
свойства, которое содержит более одного исключения.(Или в этом случае следует применять другой шаблон?)