zl程序教程

您现在的位置是:首页 >  其他

当前栏目

C#断言检测有啥用?他和异常处理又有什么关系?

2023-04-18 14:14:38 时间

在进行CAD二次开发的时候,看到参考书出现了Debug.Assert()语法,就又激发了我的兴趣!这倒是是啥意思呢?于是乎我搜了文档和网上一些大佬的说法,算是基本清楚了!现在我就把我的理解总结一下!


目录

1.前言

2.Assert断言注意事项

3.常用Assert断言方法的重载

4.断言与异常处理的区别:

5.参考文献


 1.前言

断言作为调试和交流的辅助,断言可以帮助开发者理解代码所做的假设;断言可以在距离bug最近的地方抓住它们。

看到上面这里你是不是还是不清楚?其实你完全可以先把他理解成异常处理try....catch。想想你都什么时候用异常处理呢?那么肯定是你怀疑这段代码可能出现bug,为了避免出现中断异常,就在这段代码外套一个try..catch。这样打包后如果真出问题了!至少外人看不出,你的程序也会很友好的给予提示!

别想太复杂,简单的理解assert干的就是try...catch的事,只是try...catch是为了发生错误的时候让用户用起来舒服点,assert是发生错误的时候让作为程序员的你好排查!

但是关于Assert的一些注意事项还是要了解的!请继续阅读!

2.Assert断言注意事项

例如:

假设已编写一个整数除法函数。 根据数学规则,除数绝不能为零。 可使用断言来对此进行测试:

int IntegerDivide ( int dividend , int divisor )
{
    Debug.Assert ( divisor != 0 );
    return ( dividend / divisor );
}

请注意,在创建代码的发布版时,对 System.Diagnostics.Debug.Assert 方法的调用会消失。 这意味着检查除数不为0的断言会在发布版中消失!就是说如果你在调试阶段设置的assert,在发布时候是完全不存在的【C#有发布版本的断言,可以自行文档,但是常用的是这个】,

这一方面减少了发行版本中的开销!另一方面,也带来了一个你要注意的问题:

debug时没问题!release就报错!

 3.常用Assert断言方法的重载

 4.断言与异常处理的区别:

断言是用来帮助开发人员对问题的快速定位。

异常处理用于对程序发生异常情况的处理,使用中对用户不有好的行为,不让(通常也不必)用户知道发生了什么错误。

  实际开发中,我们通常将Assert与异常混淆, 不知道什么时候使用Assert,什么时候使用异常处理。或者不用Assert,将一切情况都归为异常。这样一来,就掩盖了问题,当问题发生的时候,很难进行定位,而这些问题本该是在开发的时候就解决掉的。同时,也增加了开销。

(在c#中,debug.Assert()编译成release版本时,不会产生任何代码,而try/catch在debug/release版本中都是有代码产生,运行时需要开销)。

5.参考文献

https://www.cnblogs.com/microsoft-zyl/p/9594461.html

https://docs.microsoft.com/zh-cn/dotnet/api/system.diagnostics.debug.assert?view=net-5.0#System_Diagnostics_Debug_Assert_System_Boolean_