2010-06-11 65 views
16

我该如何着手收集异常并将它们放入AggregateException重新抛出?在我自己的代码中抛出一个AggregateException

对于我的特定代码,我有一个循环,并将有零个或多个从部分代码抛出的异常。我希望只是在出现时将新的异常添加到AggregateException中,但文档排序表明它应该与所有异常一起构造(没有方法可以将异常添加到对象中)。

那么每次创建一个新的AE以及如何将以前的AE包含在异常列表中呢?似乎一个好办法做到这一点。

有什么更好的点子?

+0

就像@bbudge我很好奇,为什么你想包含旧的异常作为新的AggregateException实例的一部分。这听起来对我来说不好。 – Crono 2016-02-05 18:25:40

+0

关键是在循环中聚合异常。似乎会有一个API来做到这一点,但最后我只是使用了一个List,并在最后创建了AggExc。 – Pat 2016-02-16 22:30:18

回答

34

你在说这样的事吗?

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

最简单的方法是将例外添加到List,直到您准备好抛出AggregateException。

对于我来说,在下一次创建AggregateException时想要返回旧的异常似乎很奇怪,但是如果您保留List,那么可以从中创建一个新的AggregateException。

相关问题