【问题标题】:Throwing an AggregateException in my own code在我自己的代码中抛出 AggregateException
【发布时间】:2011-03-02 19:36:25
【问题描述】:

我应该如何收集异常并将它们放入AggregateException 以重新抛出?

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

如果每次都创建一个新的 AE 并且只将之前的 AE 包含在例外列表中呢?似乎是一种很糟糕的方法。

有更好的想法吗?

【问题讨论】:

  • 像@bbudge 一样,我很好奇您为什么要将旧异常包含在新的 AggregateException 实例中。对我来说这听起来是个坏主意。
  • 重点是在一个循环中聚合异常。似乎有一个 API 可以做到这一点,但最后我只使用了一个 List 并在最后创建了 AggExc。

标签: .net exception


【解决方案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
    );

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

【讨论】:

  • 人们经常会发现这样的简短易懂和易于理解的示例,但是当您阅读 MS 文档(通常是大量文本)时,您仍然无法理解它们。相当于中文“字母”有1000多个符号,而拉丁字母只能处理20-30个字符
【解决方案2】:

最简单的方法是将异常添加到列表中,直到您准备好抛出 AggregateException。

在我看来,您希望在下次创建 AggregateException 时返回旧异常,但如果您保留 List,则可以从中构建一个新的 AggregateException。

【讨论】:

    猜你喜欢
    • 2011-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-16
    • 1970-01-01
    相关资源
    最近更新 更多