我可以捕获特定或自定义exception吗?

我不想抓住一些例外。 我能以某种方式做到吗?

我可以这样说:

catch (Exception e BUT not CustomExceptionA) { } 

 try { } catch (Exception ex) { if (ex is CustomExceptionA) { throw; } else { // handle } } 
 try { // Explosive code } catch (CustomExceptionA){ throw; } catch (Exception ex) { //classic error handling } 

你可以过滤它:

 if (e is CustomExceptionA) throw; 

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

 try { } catch (CustomExceptionA) { throw; } catch (Exception ex) { ... } 

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

 try { } catch (CustomExceptionA custome) { throw custome; } catch (Exception e) { // Do something that hopefully re-throw's e } 

从C#6开始,您可以使用exceptionfilter :

 try { // Do work } catch (Exception e) when (!(e is CustomExceptionA)) { // Catch anything but CustomExceptionA } 

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

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

然后可以这样调用:

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

这样,除了PreventExceptionsFor()之外的每一行都会正常抛出exception,而PreventExceptionsFor()行将被悄悄地传递过来。