是否有任何预定义的异常类型充当异常列表的容器?

时间:2018-12-12 12:19:44

标签: c# .net exception

在基于捕获另一个异常而引发异常时,可以在InnerException property中传递后者。

我正在执行许多清理程序。即使其中之一发生故障,我也想运行所有它们(因为它们可能需要整理临时保存的数据)。

同时,我不想吞下执行清除方法期间可能出现的异常。

一个简单的解决方案是将每个清理调用包装在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 :(得分:4)

您正在寻找AggregateException

因此,在您的情况下,您可以使用重载的构造函数AggregateException(IEnumerable<Exception>)

if (exceptions.Count > 0)
{
    throw new AggregateException(exceptions)
}

答案 1 :(得分:3)

是的,System.AggregateException。正是这样,InnerExceptions。您可以在其构造函数之一like this one中添加内部异常的集合。