簡體   English   中英

如何檢查 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什么意思,這是它的作用還是有其他方式?

是的,還有另一種方法。 通過調用運行代碼塊時可能發生的特定異常:

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

}
catch(AnotherException ex) {

}

然后從最具體的例外開始並朝着一般例外努力是非常重要的。

多個 catch 塊是一個答案( 文檔):

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

您可以在try塊之后添加任意數量的內容。

UPD正如在此答案的評論中添加的那樣 - 順序很重要,因此如果您有異常層次結構,請先捕獲派生的。

經典選項:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM