如何检查 catch 块中抛出的异常类型?

How to check the types of Exceptions thrown in a catch block?

我有这样的东西:

catch (Exception ex)
 {
      if (ex is "Exception Type")
      {

      }
      else if (ex is SqlException)
      {

      }
      else if 
      {
        ...
        ...
        ...
 }

这在 C# 中是正确的吗?is 到底是什么意思,这是它的作用还是有其他方式?

多个catch块是一个答案(docs):

try
{
}
catch (SqlException ex)
{
    ...    
}
catch(AnotherExceptionType ex)
{
     ...
}

您可以在 try 块后添加任意数量的内容。

UPD 正如对此答案的评论中所添加的那样 - 顺序很重要,因此如果您有异常层次结构,首先捕获派生的。

是的,还有一个办法。通过调用 运行 代码块时可能发生的特定异常:

try {
   // Do something
}
catch(SqlException ex) {

}
catch(AnotherException ex) {

}

那么从最具体的异常开始,然后逐步实现一般异常是非常重要的。

经典选项:

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);
    }
}