Consider the following code (ASP.NET/C#):
private void Application_Start(object sender, EventArgs e)
{
if (!SetupHelper.SetUp())
{
throw new ShitHitFanException();
}
}
I've never been too hesitant to simply roll my own exception type, basically because I have found (bad practice, or not) that mostly a reasonable descriptive type name gives us enough as developers to go by in order to know what happened and why something might have happened. Sometimes the existing .NET exception types even accommodate these needs - regardless of the message.
In this particular scenario, for demonstration purposes only, the application should die a horrible, disgraceful death should SetUp not complete properly (as dictated by its return value), but I can't find an already existing exception type in .NET which would seem to suffice; though, I'm sure one will be there and I simply don't know about it.
Brad Abrams posted this article that lists some of the available exception types. I say some because the article is from 2005, and, although I try to keep up to date, it's a more than plausible assumption that more have been added to future framework versions that I am still unaware of.
Of course, Visual Studio gives you a nicely formatted, scrollable list of exceptions via Intellisense - but even on analysing those, I find none which would seem to suffice for this situation...
ApplicationException: ...when a
non-fatal application error occurs
The name seems reasonable, but the
error is very definitely fatal - the
app is dead.
ExecutionEngineException: ...when
there is an internal error in the
execution engine of the CLR
Again, sounds reasonable,
superficially; but this has a very
definite purpose and to help me out
here certainly isn't it.
HttpApplicationException: ...when
there is an error processing an HTTP
request
Well, we're running an ASP.NET
application! But we're also just
pulling at straws here.
InvalidOperationException: ...when a
call is invalid for the current state
of an instance
This isn't right but I'm adding it to
the list of 'possible should you put a
gun to my head, yes'.
OperationCanceledException: ...upon
cancellation of an operation the
thread was executing
Maybe I wouldn't feel so bad using
this one, but I'd still be hijacking
the damn thing with little right.
You might even ask why on earth I would want to raise an exception here but the idea is to find out that if I were to do so then do you know of an appropriate exception for such a scenario? And basically, to what extent can we piggy-back on .NET while keeping in line with rationality?