Ben*_*ngs 10 .net java exception assertions
在Java中,我偶尔会AssertionError直接抛出一个,断言不会到达某个特定的行.这样做的一个示例default是switch声明无法访问语句中的大小写(有关示例,请参阅此JavaSpecialists页面).
我想在.Net中使用类似的机制.我可以使用相同的例外吗?或者是否有另一种方法可以使用相同的效果?
编辑 - 为了澄清,我正在寻找一种在运行时标记失败的机制,在已发布的代码中,表明代码中某些不变量(可能是灾难性的)失败.链接的示例生成0到2(包括0和2)之间的随机整数,并声明生成的数字始终为0,1或2.如果此断言不成立,则最好完全停止执行而不是继续使用某些未知数腐败的系统状态.
我通常会抛出InvalidOperationException或ArgumentOutOfRangeException取决于价值来自哪里.
或者,有Debug.Assert(只有在定义了DEBUG预处理器符号时才会失败)或者在.NET 4.0中可以使用Contract.Fail,Contract.Assert或者Contract.Assume根据情况而定.显式抛出异常有一个好处,即编译器知道下一个语句是无法访问的.
我不是一个忠实的粉丝Debug.Assert- 它通常不适合发布(因为它会抛出一个断言框而不仅仅是失败),并且默认情况下它不会在发布中被触发.我更喜欢总是被抛出的异常,因为它们阻止你的代码继续进行,无论是否有机会检测到"东西是错的".
代码契约稍微改变了游戏,因为在执行时有各种选项可以保留,静态检查器可以帮助证明你不会进入该状态.您仍然需要选择执行时间策略...
| 归档时间: |
|
| 查看次数: |
1896 次 |
| 最近记录: |