我有这样的东西:
catch (Exception ex)
{
if (ex is "Exception Type")
{
}
else if (ex is SqlException)
{
}
else if
{
...
...
...
}
C#
中的权利是这样吗?is
到底是什么意思,这是它的作用还是另外一种方式?
答案 0 :(得分:3)
是的,还有另一种方法。通过调用在运行代码块时可能发生的特定异常:
try {
// Do something
}
catch(SqlException ex) {
}
catch(AnotherException ex) {
}
那么从最具体的异常开始并逐步发展为一般异常非常重要。
答案 1 :(得分:2)
多个捕获块是一个答案(docs):
try
{
}
catch (SqlException ex)
{
...
}
catch(AnotherExceptionType ex)
{
...
}
您可以在try
块之后添加任意数量的
UPD 正如在此答案的注释中所添加的那样,顺序很重要,因此,如果您有异常层次结构,请先捕获派生的异常。
答案 2 :(得分:2)
经典选项:
try
{
return DoStuff();
}
catch (InvalidOperationException opEx)
{
return HandleInvalidOp(opEx);
}
catch (DivideByZeroException divEx)
{
return HandleDivException(divEx);
}
catch (Exception ex) // final catch-all
{
return HandleEx(ex);
}
使用模式匹配开关:
try
{
return DoStuff();
}
catch (Exception ex)
{
switch (ex)
{
case InvalidOperationException opEx:
return HandleInvalidOp(opEx);
case DivideByZeroException divEx:
return HandleDivException(divEx);
default:
return HandleEx(ex);
}
}