2015-12-23 25 views
3

我得到一套完整的嵌套異常的時候我用AggregateExceptionToString()方法直接:裹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不存在於結果字符串中。這是一個bug還是AggregateException類的一些知名功能?

回答

3

我認爲這不是一個錯誤。更多的是正常的行爲

的問題是,在ExceptionToString()不會調用innerExceptionToString(),但在異常類本身私有ToString(bool,bool)方法。

因此不調用AggregateException的覆蓋ToString()方法。

AggregateException的constructor會將innerException設置爲傳遞給構造函數的第一個異常。

在你的情況,這是new Exception("ex1")

+3

你說的沒錯,但這個真的打算和有意義的行爲嗎?特別是對於記錄這種例外情況是非常危險的 - 你只是忽略了一部分例外。我會說這是一個錯誤:)我沒有看到這種行爲的任何有意義的理由。 – Buthrakaur

+0

@Buthrakaur我認爲這不是一個錯誤。你不應該使用基本的Exception類。如果要更改行爲,請使用自定義的並提供ToString()的覆蓋 – Jehof

+0

@Buthrakaur您還應該注意,Exception類在執行AggreagateException之前很長時間纔會退出。 – Jehof

相關問題