Как сделать исключение для следующего улова?
![enter image description here]()
Я хочу сделать исключение при следующем улове (прикрепленное изображение)
Кто-нибудь знает, как это сделать?
Ответы
Ответ 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
.