可能重复:
执行多个 catch 块
一个try语句可以执行多个catch块吗?我们如何处理catch块?我们可以创建没有catch块的try吗?
可以有多个 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
在此示例中,仅当异常不是 a或派生自时,才会执行块 2 IOException
。如果IOException
抛出 an,则只有块 1 会执行,块 2 不会。
从技术上讲,您只能击中一次,但您说:
可以为单个 try 语句执行多个 catch 块吗
正在执行的关键字。所以,你可以试试:
catch (Exception ex)
{
if (ex is MyException1||
ex is MyException2)
{
//do stuff
}
else
{
throw;
}
}
只有一个catch
块将执行,它将与抛出catch
的类型密切匹配。Exception
你不能靠它try
自己。你需要一个try catch (one or more catch block)
或一个try finally
或一个try catch finally
1 是it's possible to have multiple catch
的,一个特定异常的一个捕获
样本
try
{
...
}
catch (FormatException)
{
....
}
catch (OverflowException)
{
...
}
2 你可以有try
指令没有catch
try
{
...
}
Finally
{
.....
}
至于你问题的第二部分,你可以做
try
{
stuff...
}
catch(Exception ex){}
或者
try
{
stuff...
}
finally{}
,但你不能自己尝试。
是的,您可以使用 try 语句拥有多个 catch 块。您从捕获特定异常开始,然后在最后一个块中您可能会捕获 base Exception
。只有一个 catch 块将处理您的异常。
您可以在没有 catch 块的情况下使用 try 块。尝试/最终会做。
try
{
Console.Write("test");
}
catch (IOException ex)
{
}
catch (ArithmeticException ex)
{
}
catch (Exception ex)
{
}
试一试
try
{
}
finally
{
}
catch
单个 try..catch 语句可以有任意数量的块。
但请记住一件事,你的
catch (Exception ex)
{
...
}
应该是最后一个 catch 块,因为所有异常都继承了 Exception 类。