7

我不想捕捉一些异常。我能以某种方式做到吗?

我可以这样说吗:

catch (Exception e BUT not CustomExceptionA)
{
}

?

4

6 回答 6

21
try
{
      // Explosive code
}
catch (CustomExceptionA){ throw; }
catch (Exception ex)
{
    //classic error handling
}
于 2012-09-06T13:47:51.423 回答
9
try
{
}
catch (Exception ex)
{
    if (ex is CustomExceptionA)
    {
        throw;
    }
    else
    {
        // handle
    }
}
于 2012-09-06T13:46:41.510 回答
6
于 2017-03-29T16:37:13.390 回答
3

你可以过滤它:

if (e is CustomExceptionA) throw;

当然,您可以抓住它并重新抛出它:

try
{
}
catch (CustomExceptionA) { throw; }
catch (Exception ex) { ... }
于 2012-09-06T13:46:43.500 回答
2

首先,除非您记录并重新抛出异常,否则捕获异常是不好的做法。但如果必须,您需要捕获自定义异常并重新抛出它,如下所示:

try
{
}
catch (CustomExceptionA custome)
{
    throw custome;
}
catch (Exception e)
{
    // Do something that hopefully re-throw's e
}
于 2012-09-06T13:47:18.163 回答
-1

在评论中接受@Servy 的教育后,我想到了一个解决方案,可以让你做你想做的[我认为的]。让我们创建一个如下所示的方法IgnoreExceptionsFor()

public void PreventExceptionsFor(Action actionToRun())
{
    try
    {
         actionToRun();
    }
    catch
    {}
}

然后可以这样调用:

try
{
     //lots of other stuff
     PreventExceptionsFor(() => MethodThatCausesTheExceptionYouWantToIgnore());
     //other stuff
}
catch(Exception e)
{
    //do whatever
}

这样,除了 with 的那一行之外的每一行PreventExceptionsFor()都会正常抛出异常,而里面的那一行PreventExceptionsFor()会被悄悄地通过。

于 2012-09-06T13:48:26.617 回答