我可以捕获特定或自定义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()
行将被悄悄地传递过来。