Exception Throwing

I don't do a lot of exception handling. I write code that avoids it as best as it can. The edges of my systems are out of my control. The edges of my system do throw exceptions.

If I can't do the correct thing for the exception, I bubble the exception up and it's gonna take down my app.
Or... more likely, I have a handler at the top to deal with it gracefully. If I can't fix it at the point the exception is coming in, I probably can't fix it anywhere so I should just let things explode.

How to re-throw. Well... you can use throw. Sure.

At Seattle Code Camp (2018 or 2019 since those are the only years I attended) I saw a presentation that talked in depth about exception handling.
I'm pretty sure it was Ted Neward that gave the talk.. I'm giving him credit for it anyway. :)

The presentation got me thinking very deeply about exceptions and their behavior. I played with exception behaviors for many hours after the talk. The one thing I recall from the talk is the best way to preserve stack information when rethrowing an exception


You might need to add a throw after it for the compiler to be happy.

I don't have a lot to say about it. This is so I can find the STUPID LINE OF CODE AGAIN!!!

Everytime I need it, I spend hours digging through code and searching online.

Now it's in my blog and I should be able to find it again.

Keywords I use to search for this on the last round that might help the googles pick this up for the next time I search. Almost like SEO, but more like I DON'T CARE JUST GIVE ME MY BLOG POST

proper way to throw C#
rethrow C#
rethrow C# multithread
C# best way to rethrow an exception
throw C# multithread
throw in .NET code

Thanks for dealing with my find it later post.

UPDATE: 2023-01-22

I created myself this extension method to encapsulate this throwing mechanism AND to help ignore the need for the unreachable throw.

public static class ExceptionExtensions
    public static Exception ThrowMe(this Exception ex)

        return new UnreachableException("The compiler just doesn't understand our love.");

And this is used in the calling catch block as

catch (Exception ex)
    throw ex.ThrowMe();

Since the ThrowMe throws, the throw will never be hit. If it is... well... you've got other issues.

Show Comments