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

时间:2015-12-23 10:21:25

标签: c# aggregateexception

当我直接在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类的错误还是一些众所周知的特性?

1 个答案:

答案 0 :(得分:4)

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

问题是Exception上的ToString()不会调用ToString()的{​​{1}},而是调用异常类本身的私有innerException方法

因此,ToString(bool,bool)的被覆盖的ToString()方法不会被调用。

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

在您的情况下,这是AggregateException