2010-06-11 61 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。

相關問題