如何检查在catch块中引发的异常类型?

问题描述 投票:0回答:3

我有这样的东西:

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

      }
      else if (ex is SqlException)
      {

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

C#中的权利是这样吗,is到底是什么意思,这是它的作用还是另一种方式?

c# exception try-catch sqlexception catch-block
3个回答
3
投票
是的,还有另一种方法。通过调用运行代码块时可能发生的特定异常:

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

然后,从最具体的异常开始并逐步发展为一般异常非常重要。

2
投票
[多个捕获块是一个答案(docs):

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

您可以在try块之后添加任意多。

1
投票
经典选项:

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

© www.soinside.com 2019 - 2024. All rights reserved.