可能是重复问题:
执行多个catch块
一个try语句是否可以执行多个catch块?我们如何处理这些catch块?我们可以创建没有catch块的try吗?
可能是重复问题:
执行多个catch块
一个try语句是否可以执行多个catch块?我们如何处理这些catch块?我们可以创建没有catch块的try吗?
可以有多个catch块(正如其他答案中所说),但只有第一个匹配异常类型的块会被执行。这意味着您需要正确排序catch块。例如:
try
{
}
catch (Exception exp1)
{
// Block 1
}
catch (IOException exp2)
{
// Block 2
}
由于块1捕获了所有的异常(所有异常类都派生自 Exception
),因此永远不会执行块2。
try
{
}
catch (IOException exp1)
{
// Block 1
}
catch (Exception exp2)
{
// Block 2
}
在这个例子中,只有当异常不是IOException
或派生自IOException
时,块2才会执行。如果抛出了一个IOException
,那么只有块1会执行,块2不会执行。
从技术上讲,您只能捕获一个异常,但是您说:
在单个try语句中,是否可以执行多个catch块?
关键词是“执行”。因此,您可以尝试:
catch (Exception ex)
{
if (ex is MyException1||
ex is MyException2)
{
//do stuff
}
else
{
throw;
}
}
是的,您可以在try语句中使用多个catch块。您可以从捕获特定异常开始,然后在最后一个块中捕获基本Exception
。只有一个catch块会处理您的异常。
您可以没有catch块的try块。尝试/最终将完成。
try
{
Console.Write("test");
}
catch (IOException ex)
{
}
catch (ArithmeticException ex)
{
}
catch (Exception ex)
{
}
尝试而不捕获
try
{
}
finally
{
}
是的,可以有多个catch
,一个catch用于一个特定的异常
示例
try
{
...
}
catch (FormatException)
{
....
}
catch (OverflowException)
{
...
}
2 你可以使用try
指令而不需要catch
try
{
...
}
Finally
{
.....
}
try
{
stuff...
}
catch(Exception ex){}
或者
try
{
stuff...
}
finally{}
但你不能仅使用try。
只有一个catch
块将被执行,它将是最接近抛出的Exception
类型的catch
。
你不能只有一个try
。你需要一个try catch(一个或多个catch块)
或一个try finally
或一个try catch finally
您可以在一个 try...catch 语句中有任意数量的 catch 块。
但请记住一件事,那就是您的
catch (Exception ex)
{
...
}
应该是最后一个 catch 块,因为所有异常都继承自 Exception 类。