.Net相当于Java的AssertionError

Ben*_*ngs 10 .net java exception assertions

在Java中,我偶尔会AssertionError直接抛出一个,断言不会到达某个特定的行.这样做的一个示例defaultswitch声明无法访问语句中的大小写(有关示例,请参阅此JavaSpecialists页面).

我想在.Net中使用类似的机制.我可以使用相同的例外吗?或者是否有另一种方法可以使用相同的效果?

编辑 - 为了澄清,我正在寻找一种在运行时标记失败的机制,在已发布的代码中,表明代码中某些不变量(可能是灾难性的)失败.链接的示例生成0到2(包括0和2)之间的随机整数,并声明生成的数字始终为0,1或2.如果此断言不成立,则最好完全停止执行而不是继续使用某些未知数腐败的系统状态.

Jon*_*eet 9

我通常会抛出InvalidOperationExceptionArgumentOutOfRangeException取决于价值来自哪里.

或者,有Debug.Assert(只有在定义了DEBUG预处理器符号时才会失败)或者在.NET 4.0中可以使用Contract.Fail,Contract.Assert或者Contract.Assume根据情况而定.显式抛出异常有一个好处,即编译器知道下一个语句是无法访问的.

我不是一个忠实的粉丝Debug.Assert- 它通常不适合发布(因为它会抛出一个断言框而不仅仅是失败),并且默认情况下它不会在发布中被触发.我更喜欢总是被抛出的异常,因为它们阻止你的代码继续进行,无论是否有机会检测到"东西是错的".

代码契约稍微改变了游戏,因为在执行时有各种选项可以保留,静态检查器可以帮助证明你不会进入该状态.您仍然需要选择执行时间策略...