代码之家  ›  专栏  ›  技术社区  ›  Pat

在我自己的代码中引发AggregateException

  •  19
  • Pat  · 技术社区  · 15 年前

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

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

    如果每次都创建一个新的客户销售人员,并且只将以前的客户销售人员包括在例外列表中,那该怎么办?似乎是一种做作的方式。

    有更好的主意吗?

    2 回复  |  直到 15 年前
        1
  •  38
  •   Dan Tao    15 年前

    你在说这样的事吗?

    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
  •  2
  •   bbudge    15 年前

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

    我觉得奇怪的是,下次创建AggregateException时,您希望返回旧的异常,但是如果保留列表,您可以从中构建一个新的AggregateException。