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

本文深入解析了CAD二次开发中Debug.Assert的作用,将其比喻为try...catch,探讨了其在代码中的使用场景、注意事项,以及与异常处理的区别。通过实例说明了断言在发布版本中可能消失的问题。
摘要由CSDN通过智能技术生成

在进行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_

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
C#中,异常处理机制用于处理在程序执行过程中可能发生的错误或异常情况。异常是一种表示程序执行期间出现问题的对象,它可以是系统定义的异常类型或自定义的异常类型。 异常处理的基本结构是使用try-catch块来捕获和处理异常。try块用于包含可能引发异常的代码,而catch块用于捕获和处理异常。 异常处理的基本语法如下: ```csharp try { // 可能引发异常的代码 } catch (ExceptionType1 ex) { // 处理特定类型的异常 } catch (ExceptionType2 ex) { // 处理另一种类型的异常 } finally { // 可选,无论是否发生异常,都会执行的代码 } ``` 在try块中,放置可能引发异常的代码。当异常发生时,会跳转到匹配的catch块进行处理。catch块可以根据需要捕获并处理特定类型的异常。多个catch块可以按顺序捕获不同类型的异常。 在catch块中,可以使用异常对象(如上面的ex)来访问有关异常的信息,如错误消息、堆栈跟踪等。在catch块中,可以针对不同的异常类型采取不同的处理方式,例如记录日志、发送警报或提供友好的错误提示。 finally块是可选的,包含无论是否发生异常都需要执行的代码。它通常用于释放资源或进行清理操作。 除了try-catch-finally结构,还可以使用throw语句手动引发异常。通过自定义异常类型,可以创建自己的异常类,并根据需要定义异常处理逻辑。 示例: ```csharp try { int result = Divide(10, 0); // 可能引发异常的方法调用 Console.WriteLine(result); } catch (DivideByZeroException ex) { Console.WriteLine("除零错误:" + ex.Message); } catch (Exception ex) { Console.WriteLine("其他错误:" + ex.Message); } finally { Console.WriteLine("无论是否发生异常,都会执行的代码"); } static int Divide(int x, int y) { if (y == 0) { throw new DivideByZeroException("除数不能为零"); } return x / y; } ``` 在上述示例中,我们尝试对10除以0,这会导致Divide方法引发DivideByZeroException异常。在catch块中,我们捕获并处理了这个特定类型的异常,并输出相应的错误消息。无论是否发生异常,finally块中的代码都会执行。 总结: C#中的异常处理机制通过try-catch-finally结构来捕获和处理异常。try块用于包含可能引发异常的代码,catch块用于捕获并处理特定类型的异常,finally块用于包含无论是否发生异常都需要执行的代码。通过使用自定义异常类型和throw语句,可以创建和引发自己的异常。合理的异常处理可以提高程序的健壮性和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

韦_恩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值