25

ここに画像の説明を入力してください

次のキャッチで例外をスローしたい(画像を添付)

誰かがこれを行う方法を知っていますか?

4

4 に答える 4

41

C# 6.0救助へ!

try
{
}
catch (Exception ex) when (tried < 5)
{
}
于 2015-12-30T23:29:29.403 に答える
33

それはできません。そうしようとすると、ブロック内のロジックが多すぎるかcatch、メソッドをリファクタリングして1つのことだけを実行する必要があることを示しています。再設計できない場合は、tryブロックをネストする必要があります。

try
{
    try
    {
        ...
    }
    catch (Advantage.Data.Provider.AdsException)
    {
        if (...)
        {
            throw; // Throws to the *containing* catch block
        }
    }
}
catch (Exception e)
{
    ...
}
于 2012-11-26T21:15:50.260 に答える
14

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 */
}
于 2012-11-26T21:20:22.237 に答える
0

この答えは、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
{

try2つのブロックが互いに入れ子になっているのは醜いです。

のプロパティを使用する必要がある場合は、の代わりにキャストをAdsException使用してください。asis

于 2012-11-26T22:47:34.277 に答える