Distinguishing between .NET exception types
Posted
by Swingline Rage
on Stack Overflow
See other posts from Stack Overflow
or by Swingline Rage
Published on 2010-06-08T14:59:58Z
Indexed on
2010/06/08
15:02 UTC
Read the original article
Hit count: 619
For the love of all things holy, how do you distinguish between different "exception flavors" within the predefined .NET exception classes?
For example, a piece of code might throw an XmlException
under the following conditions:
- The root element of the document is NULL
- Invalid chars are in the document
- The document is too long
All of these are thrown as XmlException
objects and all of the internal "tell me more about this exception" fields (such as Exception.HResult
, Exception.Data
, etc.) are usually empty or null.
That leaves Exception.Message
as the only thing that allows you to distinguish among these exception types, and you can't really depend on it because, you guessed it, the Exception.Message
string is glocabilized, and can change when the culture changes. At least that's my read on the documentation.
Exception.HResult
and Exception.Data
are widely ignored across the .NET libraries. They are the red-headed stepchildren of the world's .NET error-handling code. And even assuming they weren't, the HRESULT
type is still the worst, downright nastiest error code in the history of error codes. Why we are still looking at HRESULTs in 2010 is beyond me. I mean if you're doing Interop or P/Invoke that's one thing but... HRESULTs have no place in System.Exception. HRESULTs are a wart on the proboscis of System.Exception.
But seriously, it means I have to set up a lot of detailed specific error-handling code in order to figure out the same information that should have been passed as part of the exception data. Exceptions are useless if they force you to work like this. What am I doing wrong?
© Stack Overflow or respective owner