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: 571

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

Related posts about .NET

Related posts about exception