Wrapped AggregateException只报告ToString方法中的第一个异常

本文关键字:第一个 异常 方法 ToString AggregateException 报告 Wrapped | 更新日期: 2023-09-27 18:27:53

当我在AggregateException上直接使用ToString()方法时,我得到了一组完整的嵌套异常:

public void GreenTest()
{
    var ex = new AggregateException(new Exception("ex1"), new Exception("ex2"));
    ex.ToString()
        .Should()
        .Contain("ex1")
        .And
        .Contain("ex2");
}

问题是,当AggregateException被包裹在另一个异常中时,我只得到第一个异常:

public void RedTest()
{
    var ex = new Exception("wrapper", new AggregateException(new Exception("ex1"), new Exception("ex2")));
    ex.ToString()
        .Should()
        .Contain("wrapper")
        .And
        .Contain("ex1")
        .And
        .Contain("ex2");
}

ex2不存在于生成的字符串中。这是一个错误还是AggregateException类的一些众所周知的特性?

Wrapped AggregateException只报告ToString方法中的第一个异常

我认为这不是一个bug。更正常的行为

问题是Exception上的ToString()不会调用innerExceptionToString(),而是调用异常类本身的私有ToString(bool,bool)方法。

因此,AggregateException的重写ToString()方法不会被调用。

AggregateException的构造函数将innerException设置为传递给构造函数的第一个异常。

在您的情况下,这是new Exception("ex1")