silla
silla

Reputation: 1327

Can I not catch a specific or custom exception?

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

Can I say something like this:

catch (Exception e BUT not CustomExceptionA)
{
}

?

Upvotes: 8

Views: 2919

Answers (6)

Jordan Parker
Jordan Parker

Reputation: 1236

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

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

Upvotes: 10

Phillip Schmidt
Phillip Schmidt

Reputation: 8818

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.

Upvotes: -1

Steve B
Steve B

Reputation: 37660

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

Upvotes: 22

n8wrl
n8wrl

Reputation: 19765

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
}

Upvotes: 2

Felix K.
Felix K.

Reputation: 6281

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) { ... }

Upvotes: 3

abatishchev
abatishchev

Reputation: 100248

try
{
}
catch (Exception ex)
{
    if (ex is CustomExceptionA)
    {
        throw;
    }
    else
    {
        // handle
    }
}

Upvotes: 9

Related Questions