次のキャッチで例外をスローしたい(画像を添付)
誰かがこれを行う方法を知っていますか?
C# 6.0
救助へ!
try
{
}
catch (Exception ex) when (tried < 5)
{
}
それはできません。そうしようとすると、ブロック内のロジックが多すぎるかcatch
、メソッドをリファクタリングして1つのことだけを実行する必要があることを示しています。再設計できない場合は、try
ブロックをネストする必要があります。
try
{
try
{
...
}
catch (Advantage.Data.Provider.AdsException)
{
if (...)
{
throw; // Throws to the *containing* catch block
}
}
}
catch (Exception e)
{
...
}
1つの可能性は、try/catch句をネストすることです。
try
{
try
{
/* ... */
}
catch(Advantage.Data.Provider.AdsException ex)
{
/* specific handling */
throw;
}
}
catch(Exception ex)
{
/* common handling */
}
別の方法もあります。一般的なcatchステートメントのみを使用し、例外タイプを自分でチェックします。
try
{
/* ... */
}
catch(Exception ex)
{
if(ex is Advantage.Data.Provider.AdsException)
{
/* specific handling */
}
/* common handling */
}
この答えは、Honza Brestanの答えに触発されています:
}
catch (Exception e)
{
bool isAdsExc = e is Advantage.Data.Provider.AdsException;
if (isAdsExc)
{
tried++;
System.Threading.Thread.Sleep(1000);
}
if (tried > 5 || !isAdsExc)
{
txn.Rollback();
log.Error(" ...
...
}
}
finally
{
try
2つのブロックが互いに入れ子になっているのは醜いです。
のプロパティを使用する必要がある場合は、の代わりにキャストをAdsException
使用してください。as
is