[英]Catch block is not being evaluated when exceptions are thrown from finallys
[英]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.