执行多个catch块

时间:2012-09-25 12:58:40

标签: c#

  

可能重复:
  executing multiple catch blocks

可以为单个try语句执行多个catch块吗?我们如何处理catch块?我们可以创建try而不使用catch块吗?

8 个答案:

答案 0 :(得分:14)

可以有多个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不执行。

答案 1 :(得分:3)

  • 您可以将多个catch块与try块关联,但只有一个catch块可以处理您的异常。
  • 是的,你可以尝试没有捕获的块,但必须有一个 最后阻止

答案 2 :(得分:1)

从技术上讲,你只能打一个捕获但是你说:

  

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

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

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

答案 3 :(得分:0)

是的,您可以使用try语句拥有多个catch块。首先捕获特定的异常,然后在最后一个块中,您可以捕获基础Exception。只有一个catch块将处理您的异常。

你可以尝试阻止没有catch块。尝试/终于会做。

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

尝试没有捕获

        try
        {
        }
        finally
        {
        }

答案 4 :(得分:0)

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

样品

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

2您可以在没有try

的情况下进行catch分析
try
{
 ...
}
Finally
{
  .....
}

答案 5 :(得分:0)

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

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

try
{
    stuff...
}
finally{}

,但你不能单独尝试。

答案 6 :(得分:0)

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

答案 7 :(得分:0)

对于单个try..catch语句,您可以拥有任意数量的catch块。

但请记住一件事,那就是你的

catch (Exception ex)
{
    ...
}

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