前置条件
Contract.Requires( x != null );
旧式
if ( x == null ) throw new ...
Contract.EndContractBlock(); // All previous "if" checks are preconditions
代码协定提供一种使用代码指定前置条件、后置条件和对象固定条件的方式。前置条件是在输入方法或属性时必须满足的要求。后置条件描述代码退出时的预期的方法或属性。对象固定条件描述正常状态下的类的预期状态。
如果代码必须在前置条件失败时引发特定的异常,则可以使用 Requires 的泛型重载,如下所示。
Contract.Requires<ArgumentNullException>( x != null, "x" );
|
名称 |
说明 |
|
检查条件;如果条件为 false,则遵循为分析器设置的升级策略。 |
|
|
检查条件;如果条件为 false,则遵循由分析器设置的升级策略,并显示指定的消息。 |
|
|
指示代码分析工具假设指定的条件为 true(即使无法静态地证明该条件始终为 true)。 |
|
|
指示代码分析工具假设某个条件为 true(即使无法静态地证明该条件始终为 true),并在假设失败时显示一条消息。 |
|
|
当方法的协定仅包含 if-then-throw 形式的前置条件时,标记协定部分的结尾。 |
|
|
为封闭方法或属性指定一个后置条件协定。 |
|
|
为提供的退出条件指定后置条件协定,并指定条件为 false 时要显示的消息。 |
|
|
基于提供的异常和条件为封闭方法或属性指定一个后置条件协定。 |
|
|
基于提供的异常和条件为封闭方法或属性指定后置条件协定,并指定条件为 false 时要显示的消息。 |
|
|
确定指定的测试对某个整数范围中的任何整数是否为 true。 |
|
|
Exists<(Of<<'(T>)>>)(IEnumerable<(Of<<'(T>)>>), Predicate<(Of<<'(T>)>>)) |
确定函数中是否存在某个元素集合中的元素。 |
|
确定某个特定条件是否对指定范围内的所有整数都有效。 |
|
|
ForAll<(Of<<'(T>)>>)(IEnumerable<(Of<<'(T>)>>), Predicate<(Of<<'(T>)>>)) |
确定函数中是否存在某个集合中的所有元素。 |
|
为封闭类指定一个固定协定。 |
|
|
为封闭类指定一个固定协定,并在该协定的条件失败时显示一条消息。 |
|
|
表示方法或属性开始时的值。 |
|
|
为封闭方法或属性指定一个前置条件协定。 |
|
|
为封闭方法或属性指定一个前置条件协定,并在该协定的条件失败时显示一条消息。 |
|
|
为封闭方法或属性指定一个前置条件协定,并在该协定的条件失败时引发异常。 |
|
|
为封闭方法或属性指定一个前置条件协定,并在该协定的条件失败时引发异常,其中包含提供的消息。 |
|
|
表示一个方法或属性的返回值。 |
|
|
表示从一个方法返回时 out 参数的最终(输出)值。 |
和DUBUG类进行比较
|
名称 |
说明 |
|
检查条件,如果该条件为 false,则输出调用堆栈。 |
|
|
检查条件,如果该条件为 false,则显示指定的消息。 |
|
|
检查条件,如果该条件为 false,则显示指定的两条消息。 |
|
|
检查条件,如果该条件为 false,则输出消息和调用堆栈。 |
|
|
使用 OutputDebugString 函数将指定对象的 ToString 方法的值写入调试器。 |
|
|
使用 OutputDebugString 函数将指定的后跟行终止符的消息写入调试器。 |
|
|
使用 OutputDebugString 函数将后跟行终止符的带格式字符串写入调试器。 |
异常类和属性
Exception 类的若干属性使了解异常更容易。这些属性包括:
StackTrace 属性。
此属性包含可用来确定错误发生位置的堆栈跟踪。如果有可用的调试信息,则堆栈跟踪包含源文件名和程序行号。
InnerException 属性。
此属性可用来在异常处理过程中创建和保留一系列异常。可使用此属性创建一个新异常来包含以前捕捉的异常。原始异常可由 InnerException 属性中的第二个异常捕获,这使处理第二个异常的代码可以检查附加信息。
为提高调用方确定异常引发原因的能力,有时可能需要方法捕捉帮助器例程引发的异常,然后引发一个进一步指示已发生的错误的异常。可以创建一个更有意义的新异常,其中内部异常引用可以设置为原始异常。然后可以针对调用方引发这种更有意义的异常。请注意,使用此功能,可以创建以最先引发的异常作为结束点的一系列相链接的异常。
Message 属性。
此属性提供有关异常起因的详细信息。消息以引发异常的线程的 Thread..::..CurrentUICulture 属性所指定的语言显示。
Data 属性
此属性是可以保存任意数据(以键值对的形式)的 IDictionary。