什么是“扔”

时间:2009-02-21 13:38:27

标签: c# exception-handling throw

任何人都可以解释我在异常处理中使用throw吗? 当我抛出异常时会发生什么?

5 个答案:

答案 0 :(得分:13)

这意味着“导致”异常。当你“抛出”异常时,你会说“出了问题,这里有一些细节”。

然后,您可以“捕获”“抛出”异常,以使您的程序优雅地降级,而不是错误和死亡。

答案 1 :(得分:6)

“抛出”异常是触发整个异常处理过程的原因。

在正常执行过程中,程序中的行以循环和分支顺序执行。当发生某种错误时,会创建一个异常然后抛出异常。

抛出的异常将修改程序中的常规操作顺序,使得在某个“catch”块内处理异常之前不会执行“正常”指令。一旦在catch块中捕获到异常,并且执行该catch块中的代码(“处理”异常),正常的程序执行将在catch块之后立即恢复。

// Do some stuff, an exception thrown here won't be caught.
try
{
  // Do stuff
  throw new InvalidOperationException("Some state was invalid.");
  // Nothing here will be executed because the exception has been thrown
}
catch(InvalidOperationException ex) // Catch and handle the exception
{
  // This code is responsible for dealing with the error condition
  //   that prompted the exception to be thrown.  We choose to name
  //   the exception "ex" in this block.
}
// This code will continue to execute as usual because the exception
//   has been handled.

答案 2 :(得分:3)

当你抛出一个异常时,你基本上说某些条件已经超出了预期处理它的调用者的合理方法。它们在构造函数中特别有用,它们无法发出任何形式的构造失败(因为它们没有返回值)。

当您抛出异常时,运行时会向上移动执行链,直到找到一个 catch 块,该块可以分配给您抛出的异常类型。在运行代码的过程中,您可以使用任何 finally 块,这样您就可以(通常)释放您可能获得的任何资源。

答案 3 :(得分:1)

throw会创建要处理的异常。您传递的对象将成为描述异常的数据。

在抛出某些东西之前,没有任何例外需要处理。

答案 4 :(得分:1)

抛出异常会导致异常升高堆栈。 throw有两种主要方案。

  1. 您的代码具有独特的特殊条件

    if(inputVal < 0)
    {
        throw new LessThanZeroCustomException("You cannot enter a value less than zero");
    }
    

    上面的代码假设您编写了一个名为LessThanZeroCustomException的异常对象。我实际上不会这样命名,但名称中的Custom旨在说明您对此进行了编码。它很可能会继承自

  2. 有一个被抓住并需要重新抛出的特殊情况。通常的原因是记录。在大多数情况下,我不喜欢这种模式,因为你最终会花时间捕捉,记录和反复投掷。这是因为大多数人在每个级别都执行此模式try ... catch。呸!

  3. 简而言之,throw表示“我发现了一个我无法处理的异常情况,所以我通过抛出异常来让使用此代码的人知道”。