簡體   English   中英

我如何知道是否故意拋出了異常?

[英]How can i tell if an Exception was deliberately thrown?

我想捕獲一個異常,以判斷是否是我故意拋出了錯誤或其他類似運行時錯誤的錯誤(對象不是對象實例)。

try
{
    throw new Exception("throw this", "these can be many possible values");
}
catch (System.Exception ex)
{
    if (IThrew) // <--- how can i tell if i threw or not?
    {
        exReport = "one thing"; // <--- Should go in here in this example.
    }
    else
    {
        exReport = "another thing";
    }

    throw new FaultException<ExceptionReport>(exReport, new FaultReason(ex.Message), new FaultCode("Receiver"));

}

澄清:

我需要保留所有異常的記錄,然后在異常報告(異常數組)中最后顯示它們。 這是我必須遵循的架構的一部分。 (所以請不要讓我以其他方式這樣做)。

我的所有工作都很棒,它輸出如下內容:

...
<soap:Detail>
<ows:ExceptionReport>
 <Exception exceptionCode="…" locator="…">
  <ExceptionText>…</ExceptionText>
 </Exception>
 <Exception exceptionCode="…" locator="…">
  <ExceptionText>…</ExceptionText>
 </Exception>
</ows:ExceptionReport>
</soap:Detail>
...

問題是,當我在ExceptionReport中已經有一些錯誤時,就會發生運行時錯誤。

但是我意識到我在這方面走錯了路...正如加里所說的...我不應該將異常用作流控制。

使用其他異常。 給它自己的catch子句。

對您自己的異常使用特殊類型的異常並進行檢查。

否則,您將不得不檢查堆棧跟蹤以查看原點是否是您的程序集之一,這既丑陋又不可靠。

您無法分辨為什么會引發異常。

可以做的是創建自己的異常類,以便您可以捕獲它們-這些將是故意拋出的異常。 也就是說,由於您創建了異常類,因此框架不會拋出這些異常類。

try
{
 // something
}
catch(MyCustomException ex)
{
   // Thrown by Application logic
}
catch(System.Exception ex)
{
   // Could by thrown by anything
}

您可以查看異常上的調用堆棧,看看它的頂部是否是您的代碼-如果是這樣,則直接產生了異常,但是無法判斷是否使用了throw或將int除以零

正如其他人所說,唯一肯定的解雇方法是拋出其他人無法拋出的異常-由您控制並具有共同的獨特基類的異常

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM