Why is UnhandledExceptionEventArgs.ExceptionObject an object and not an Exception?
I am attaching to AppDomain.UnhandledException
In addition to what Jared has already mentioned, you can safely cast to Exception in .NET Framework 2.0 and higher if RuntimeCompatibilityAttribute(WrapNonExceptionThrows=true) has been applied to your assembly (will be added automatically by the C# and VB compilers).
When this attribute has been applied, non-Exception "exceptions" will be wrapped in RuntimeWrappedException.