繁体   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