【问题标题】:Execution of multiple catch blocks [duplicate]执行多个catch块[重复]
【发布时间】:2012-09-25 12:58:39
【问题描述】:

可能重复:
executing multiple catch blocks

一个try语句可以执行多个catch块吗?我们如何处理catch块?我们可以创建没有catch块的try吗?

【问题讨论】:

  • 你尝试的时候发生了什么?您的 PC 上是否安装了 Visual Studio?如果没有,我建议您从安装它开始。然后运行它。然后创建一个新项目,您可以在其中尝试并使用 C#。一旦您在使用 C# 代码时遇到一些问题,请不要犹豫,回到 StackOverflow,展示您编写的代码并提出相关问题。
  • 我是使用异常的初学者,所以我想了解更多。
  • 当然,启动 Visual Studio,创建一个新的控制台应用程序并尝试编写代码。此外,MSDN 文档将帮助您入门。您提出的问题很容易通过编写几行代码来验证。试试吧——你会看到的。编译器将指导您。您可以使用调试器在代码中放置断点并在运行时单步执行,以便您可以跟踪程序的执行流程。我的 cmets 的重点是,在互联网论坛上提问之前,您应该自己尝试一些事情。
  • @DarinDimitrov 试图说 Stack Overflow(尽管您得到了很多答案)并不是来教您如何编程的。 Stack Overflow 最初是为那些在他们的解决方案中遇到代码的人创建的。老实说,最近出现了更多这样的问题,人们为他们获得了很多代表,但达林是 100% 正确的,甚至不应该在这里问这个问题。为了诚信,我将删除我的答案达林。

标签: c#


【解决方案1】:

可以有多个 catch 块(如其他答案中所述),但只执行第一个匹配异常类型的块。这意味着您需要正确订购 catch 块。例如:

try
{
}
catch (Exception exp1)
{
    // Block 1
}
catch (IOException exp2)
{
    // Block 2
}

块 2 永远不会被执行,因为块 1 捕获每个异常(所有异常类都派生自 Exception)。

try
{
}
catch (IOException exp1)
{
    // Block 1
}

catch (Exception exp2)
{
    // Block 2
}

在此示例中,仅当异常不是 IOException 或派生自 IOException 时,才会执行块 2。如果抛出IOException,只会执行块1,块2不会。

【讨论】:

    【解决方案2】:
    • 您可以将多个 catch 块与一个 try 块关联,但只有一个 catch 块可以处理您的异常。
    • 是的,你可以有一个没有 catch 的 try 块,但必须有一个 最后阻塞

    【讨论】:

    • 当一个catch块发现异常时,其他catch块会执行还是不执行?
    • 您可以轻松管理异常并将其传播到另一个块,即使我真的不知道它有什么帮助
    【解决方案3】:

    从技术上讲,您只能击中一次,但您说:

    单个try语句可以执行多个catch块

    正在执行的关键字。所以,你可以试试:

    catch (Exception ex)            
    {                
        if (ex is MyException1||
            ex is MyException2)
        {
           //do stuff
        }
        else
        {
           throw;
        }
    }
    

    【讨论】:

      【解决方案4】:

      是的,你可以有多个带有 try 语句的 catch 块。您从捕获特定异常开始,然后在最后一个块中您可能会捕获基数Exception。只有一个 catch 块将处理您的异常。

      你可以在没有 catch 块的情况下使用 try 块。尝试/终于可以了。

              try
              {
                  Console.Write("test");
              }
              catch (IOException ex)
              {
              }
              catch (ArithmeticException ex)
              {
              }
              catch (Exception ex)
              {
              }
      

      试一试

              try
              {
              }
              finally
              {
              }
      

      【讨论】:

      • 如果一个catch块处理了异常,其他catch块会发生什么??
      • @chandrasekhar - 什么都没有。只会执行一个 catch 块。
      【解决方案5】:

      1 是 it's possible to have multiple catch,一个特定异常的一个捕获

      样本

      try
      {
          ...
      }
      catch (FormatException)
      {
          ....
      }
      catch (OverflowException)
      {
          ...
      }
      

      2 你可以在没有catch 的情况下拥有try 指令

      try
      {
       ...
      }
      Finally
      {
        .....
      }
      

      【讨论】:

        【解决方案6】:

        只有一个catch 块将执行,并且它将是与抛出的Exception 的类型密切匹配的catch。 你不能自己拥有try。您需要try catch (one or more catch block)try finallytry catch finally

        【讨论】:

          【解决方案7】:

          您可以为单个 try..catch 语句设置任意数量的 catch 块。

          但请记住一件事,你的

          catch (Exception ex)
          {
              ...
          }
          

          应该是最后一个catch块,因为所有异常都继承了Exception类。

          【讨论】:

            【解决方案8】:

            至于你问题的第二部分,你可以做任何一个

            try
            {
                stuff...
            }
            catch(Exception ex){}
            

            try
            {
                stuff...
            }
            finally{}
            

            ,但你不能自己尝试。

            【讨论】:

              猜你喜欢
              • 2011-05-01
              • 1970-01-01
              • 1970-01-01
              • 2017-11-08
              • 1970-01-01
              • 2013-01-01
              • 1970-01-01
              • 2014-12-15
              • 1970-01-01
              相关资源
              最近更新 更多