6

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

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

4

1 回答 1

4

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

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

所以不会调用重写的ToString()方法。AggregateException

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

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

于 2015-12-23T10:34:05.627 回答