19

我一直在查看我们的一个应用程序中的一些代码,如下所示:

catch (AggregateException ae)
{
    this._logger.Log(ae.Flatten().InnerException.ToString(), Category.Exception, Priority.High);
}

我的问题是这个。我知道做什么AggregateException.Flatten(),我知道AggregateException.Flatten().InnerExceptions代表什么。但是,AggregateException.Flatten().InnerException(单)代表什么?

4

1 回答 1

39

它只是原始异常中的非 AggregateException之一。例如,如果您的首字母AggregateException为:

AggregateException
    AggregateException
        IOException("x")
        IOException("y")
    IOException("z")

然后InnerException,展平结果的 将显示IOException("x")IOException("y")IOException("z")。我不相信会有任何保证。(我相信目前的行为会给出“z”版本......)这将是InnerExceptions扁平化版本中的第一个,但这应该被视为所有原始非 AggregateExceptions的联合,没有保证订单。

基本上InnerExceptionAggregateException. 记录所有InnerExceptions...或仅调用ToString()顶级异常会更有用,这将保留所有结构...

于 2012-11-26T18:27:24.440 回答