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
类的一些众所周知的特性?
我认为这不是一个bug。更正常的行为
问题是Exception
上的ToString()不会调用innerException
的ToString()
,而是调用异常类本身的私有ToString(bool,bool)
方法。
因此,AggregateException
的重写ToString()方法不会被调用。
AggregateException的构造函数将innerException设置为传递给构造函数的第一个异常。
在您的情况下,这是new Exception("ex1")