异常类和属性
更新:2007 年 11 月
Exception 类是异常从其进行继承的基类。大多数异常对象都是 Exception 的某个派生类的实例,不过,任何从 Object 类派生的对象都可以作为异常引发。请注意,并非所有语言都支持引发和捕捉不从 Exception 派生的对象。在几乎任何情况下,都建议仅引发和捕捉 Exception 对象。
Exception 类的若干属性使了解异常更容易。这些属性包括:
StackTrace 属性。
此属性包含可用来确定错误发生位置的堆栈跟踪。如果有可用的调试信息,则堆栈跟踪包含源文件名和程序行号。
InnerException 属性。
此属性可用来在异常处理过程中创建和保留一系列异常。可使用此属性创建一个新异常来包含以前捕捉的异常。原始异常可由 InnerException 属性中的第二个异常捕获,这使处理第二个异常的代码可以检查附加信息。
例如,假设有一个读取文件并格式化相应数据的方法。代码试图从文件读取,但引发 FileException。该方法捕捉 FileException 并引发 BadFormatException。在此情况下,FileException 可保存在 BadFormatException 的 InnerException 属性中。
为提高调用方确定异常引发原因的能力,有时可能需要方法捕捉帮助器例程引发的异常,然后引发一个进一步指示已发生的错误的异常。可以创建一个更有意义的新异常,其中内部异常引用可以设置为原始异常。然后可以针对调用方引发这种更有意义的异常。请注意,使用此功能,可以创建以最先引发的异常作为结束点的一系列相链接的异常。
Message 属性。
此属性提供有关异常起因的详细信息。Message 以引发异常的线程的 Thread.CurrentUICulture 属性所指定的语言显示。
HelpLink 属性。
此属性可保存某个帮助文件的 URL(或 URN),该文件提供有关异常起因的大量信息。
Data 属性
此属性是可以保存任意数据(以键值对的形式)的 IDictionary。
大多数从 Exception 继承的类都不实现其他成员或提供附加功能;它们只是从 Exception 继承。因此,在异常层次结构、异常名称以及异常包含的信息中可以找到有关异常的最重要信息。