在我自己的代码中抛出AggregateException

时间:2010-06-11 19:09:25

标签: .net exception

我应该如何收集异常并将它们放入AggregateException重新投掷?

对于我的特定代码,我有一个循环,并且将从代码的一部分抛出零个或多个异常。我希望在AggregateException出现时添加新的异常,但文档类型表明它应该一次构造所有异常(没有方法向对象添加异常)。

那么每次创建一个新的AE并将异常列表中的前一个AE包括在内怎么样?看起来很简单。

有更好的想法吗?

2 个答案:

答案 0 :(得分:39)

你在谈论这样的事吗?

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
    );

对我来说似乎是最合乎逻辑的方式。

答案 1 :(得分:2)

最简单的方法是在您准备抛出AggregateException之前将异常添加到List。

我觉得你想在下次创建AggregateException时返回旧的异常似乎很奇怪,但是如果你保持你的List,你可以从中构建一个新的AggregateException。