我想在下一次捕获时抛出异常,(我附上图片)
有人知道怎么做吗?
答案 0 :(得分:28)
你不能,并试图这样做表明你的catch
块中有太多的逻辑,或者你应该重构你的方法只做一个的事情。如果您无法重新设计它,则必须嵌套try
块:
try
{
try
{
...
}
catch (Advantage.Data.Provider.AdsException)
{
if (...)
{
throw; // Throws to the *containing* catch block
}
}
}
catch (Exception e)
{
...
}
答案 1 :(得分:25)
C# 6.0
救援!
try
{
}
catch (Exception ex) when (tried < 5)
{
}
答案 2 :(得分:11)
一种可能性是嵌套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 */
}
答案 3 :(得分:0)
我不会这样做,它“闻起来”你会因为两个异常块调用的“回滚和日志”方法会好得多。
答案 4 :(得分:0)
这个答案的灵感来自Honza Brestan's answer:
}
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
。