Выброс AggregateException в моем собственном коде

Как мне нужно собирать исключения и помещать их в AggregateException для повторного броска?

Для моего конкретного кода у меня есть цикл и будет иметь ноль или несколько исключений, которые будут выбрасываться из части кода. Я надеялся просто добавить новые исключения в AggregateException по мере их возникновения, но тип документации указывает, что он должен быть сконструирован со всеми Исключениями одновременно (нет способа добавить исключение к объекту).

А как насчет создания нового AE каждый раз и просто включения предыдущего AE в список исключений? Кажется, это хоккейный способ сделать это.

Любые лучшие идеи?

Ответы

Ответ 1

Вы говорите о чем-то подобном?

var exceptions = new List<Exception>();
foreach (var item in items) {
    try {
        DoSomething(item);

    } catch (Exception ex) {
        exceptions.Add(ex);
    }
}

if (exceptions.Count > 0)
    throw new AggregateException(
        "Encountered errors while trying to do something.",
        exceptions
    );

Кажется, это самый логичный способ для меня.

Ответ 2

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

Мне кажется странным, что вы захотите вернуть старые исключения в следующий раз, когда вы создадите исключение AggregateException, но если вы сохранили свой список вокруг, вы могли бы просто создать новое исключение AggregateException из этого.