Can I not catch a specific or custom exception?

后端 未结 6 1570
余生分开走
余生分开走 2021-01-18 02:16

I dont want to catch some exception. Can I do it somehow?

Can I say something like this:

catch (Exception e BUT not CustomExceptionA)
{
}


        
相关标签:
6条回答
  • 2021-01-18 02:55

    Starting with C# 6, you can use an exception filter:

    try
    {
        // Do work
    }
    catch (Exception e) when (!(e is CustomExceptionA))
    {
        // Catch anything but CustomExceptionA
    }
    
    0 讨论(0)
  • 2021-01-18 03:00

    You can filter it:

    if (e is CustomExceptionA) throw;
    

    And of course you can catch it and rethrow it:

    try
    {
    }
    catch (CustomExceptionA) { throw; }
    catch (Exception ex) { ... }
    
    0 讨论(0)
  • 2021-01-18 03:01

    After being schooled by @Servy in the comments, I thought of a solution that'll let you do [what I think] you want to do. Let's create a method IgnoreExceptionsFor() that looks like this:

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

    This can then be called like this:

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

    That way, every line except for the one with PreventExceptionsFor() will throw exceptions normally, while the one inside PreventExceptionsFor() will get quietly passed over.

    0 讨论(0)
  • 2021-01-18 03:05
    try
    {
    }
    catch (Exception ex)
    {
        if (ex is CustomExceptionA)
        {
            throw;
        }
        else
        {
            // handle
        }
    }
    
    0 讨论(0)
  • 2021-01-18 03:05

    First off, it's bad practice to catch Exception unless you log and re-throw it. But if you must, you need to catch your custom exception and re-throw it like so:

    try
    {
    }
    catch (CustomExceptionA custome)
    {
        throw custome;
    }
    catch (Exception e)
    {
        // Do something that hopefully re-throw's e
    }
    
    0 讨论(0)
  • 2021-01-18 03:12
    try
    {
          // Explosive code
    }
    catch (CustomExceptionA){ throw; }
    catch (Exception ex)
    {
        //classic error handling
    }
    
    0 讨论(0)
提交回复
热议问题