Подтвердить что ты не робот

Как сделать исключение для следующего улова?

enter image description here

Я хочу сделать исключение при следующем улове (прикрепленное изображение)

Кто-нибудь знает, как это сделать?

4b9b3361

Ответ 1

Вы не можете, и попытка сделать это предполагает, что у вас слишком много логики в ваших блоках catch или что вы должны реорганизовать свой метод, чтобы сделать только одно. Если вы не можете его перепроектировать, вам нужно будет вложить блоки try:

try
{
    try
    {
        ...
    }
    catch (Advantage.Data.Provider.AdsException)
    {
        if (...)
        {
            throw; // Throws to the *containing* catch block
        }
    }
}
catch (Exception e)
{
    ...
}

Ответ 2

C# 6.0 на помощь!

try
{
}
catch (Exception ex) when (tried < 5)
{
}

Ответ 3

Одна возможность заключается в вложении предложения 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 */
}

Ответ 4

Я бы этого не сделал, он "пахнет", вам будет намного лучше иметь метод "отката и журнала", который вызывается обоими блоками исключений.

Ответ 5

Этот ответ вдохновлен ответом Хонды Бреста:

}
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, вложенные друг в друга.

Если вам нужно использовать свойства AdsException, используйте as вместо is.