Существует ли какой-либо заранее определенный тип исключения, который служит контейнером для списка исключений? - PullRequest
0 голосов
/ 12 декабря 2018

При создании исключения на основе перехвата другого исключения последнее исключение может быть передано в свойстве 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 свойства, которое содержит более одного исключения.(Или в этом случае следует применять другой шаблон?)

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Вы ищете AggregateException

Так что в вашем случае вы можете сделать, как показано ниже, используя один из перегруженных конструкторов AggregateException(IEnumerable<Exception>)

if (exceptions.Count > 0)
{
    throw new AggregateException(exceptions)
}
0 голосов
/ 12 декабря 2018

Да, System.AggregateException.И это именно то, InnerExceptions .Вы можете добавить коллекцию внутренних исключений в один из ее конструкторов, , например, .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...