Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do you suppress errors to a method call in C#?

I'm looking for an "elegant" way to suppress exceptions when calling a method.

I think the following code is way too verbose:

try
{ CallToMethodThatMayFail(3); }
catch {}

Is there some syntactic sugar I can use to say "I don't really care if this method fails"? I want to call the method and continue execution regardless of what happens with the method.

like image 223
Esteban Araya Avatar asked Jun 30 '09 20:06

Esteban Araya


3 Answers

It is rarely a good idea to ignore/swallow errors...

To allow re-use, the only option you have is something like a method that takes an Action:

 static void IgnoreErrors(Action action) {try {action();} catch {}}

But you haven't exactly saved much by the time you've done:

SomeHelper.IgnoreErrors(() => CallToMethodThatMayFail(3));

I'd just leave the try/catch in place...


Re the question in the comment:

static void IgnoreErrors<T>(Action action) where T : Exception
{
    try { action(); } catch (T) {}
}

SomeHelper.IgnoreErrors<ParseException>(() => CallToMethodThatMayFail(3));

but I would still find it clearer to have the try/catch locally...

like image 62
Marc Gravell Avatar answered Oct 26 '22 22:10

Marc Gravell


Nope this is it.

And it's a good thing it's verbose. If you're suppressing a possible exception you better have a very good reason. The verbosity will help you or the next person who looks at the code in a few months.

like image 27
nos Avatar answered Oct 27 '22 00:10

nos


Using Castle, you could do something like this:

public class ExceptionSuppressionInterceptor : Castle.Core.Interceptor.IInterceptor
{
   public void Intercept(IInvocation invocation)
   {
       try {
           invocation.Proceed();
       }
       catch (Exception ex) {
            // Suppressed!
       }
   }
}

And decorate the class you want to suppress exceptions for like this:

[Interceptor(typeof(ExceptionSuppressionInterceptor))]
public class GoodPracticeBreaker {

}

But you really probably shouldn't.

like image 44
Jeremy Frey Avatar answered Oct 26 '22 23:10

Jeremy Frey