如何将异常抛给下一个捕获?

时间:2012-11-26 21:13:01

标签: c# exception exception-handling

enter image description here

我想在下一次捕获时抛出异常,(我附上图片)

有人知道怎么做吗?

5 个答案:

答案 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