2012-09-25 54 views
3

可能重复:??
executing multiple catch blocks执行多个catch块

可以在多个catch块单个try语句执行我们如何处理catch块才能创造尝试没有catch块?

+8

当你尝试时发生了什么?你的电脑上安装了Visual Studio吗?如果不是,我会建议你先安装它。然后运行它。然后创建一个新的项目,在那里你可以尝试一下并使用C#来玩。一旦你在使用C#代码时遇到一些问题,不要犹豫,回到StackOverflow,显示你写的代码并提出一个关于它的问题。 –

+0

我是使用异常的先行者,所以我想知道更多关于它们的信息。 –

+3

当然,启动Visual Studio,创建一个新的控制台应用程序并尝试编写代码。此外,MSDN文档将帮助您入门。你问的这种问题很容易通过编写几行代码来验证。试试吧 - 你会看到的。编译器会引导你。您可以使用调试器在代码中放置断点并在运行时逐步执行,以便您可以跟踪程序的执行流程。我的意见的一点是,在网上论坛上提问之前,你应该自己尝试一下。 –

回答

3
  • 您可以拥有多个与try块关联的catch块,但只有一个catch块可以处理您的异常。
  • 是的,你可以没有赶上try块,但它是强制性的有 finally块
+0

当catch块发现异常时,其他catch块将执行或不执行? –

+0

您可以轻松地管理异常并将其传播到另一个块,即使我真的无法得到它的帮助 – sataniccrow

0

是的,你可以有try语句多个catch块。首先捕捉特定的例外,然后在最后一个块中获取基地Exception。只有一个catch块会处理你的异常。

你可以尝试没有catch块的块。尝试/最后会做。

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

尝试没有赶上

 try 
     { 
     } 
     finally 
     { 
     } 
+0

如果catch块处理异常,其他catch块会发生什么? –

+0

@chandrasekhar - 没什么。只有一个catch块会被执行。 –

0

1是it's possible to have multiple catch,一个渔获一项特殊例外

样品

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

2你可以有try instrction没有catch

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

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

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

try 
{ 
    stuff... 
} 
finally{} 

,但你不能这样做本身尝试。

0

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

0

从技术上讲,你只能打一个陷阱,但你说:

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

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

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

你可以有任意数量的catch块的一次尝试..catch语句。

但请remeber一两件事,那你

catch (Exception ex) 
{ 
    ... 
} 

应该是最后的catch块,因为所有的异常继承类的异常。

8

可以有多个catch块(如已经在其他答案中所述),但只执行第一个匹配异常类型的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 
} 

在这个例子中,数据块2将仅如果异常不是IOException或从IOException衍生执行。如果抛出IOException,则只执行块1,块2不执行。

相关问题