C#学习记录——错误处理/异常处理

2025-12-13 0 634

『所谓辉煌的人生,不过是欲望的囚徒。』—— 网络

大多数人不过是普通人,过的不过是是普通的人生,但普通并不等于平凡,持续学习,用自己喜欢的方式过一生。加油!!!

错误处理

本篇的第一部分学习如何在应用程序的开发过程中查找和改正错误,使这些错误不会在发布的代码中出现。但有时,我们知道可能会有错误发生,但不能100%地肯定他们不会发生。此时,最好能预料到错误的发生,编写足够健壮的代码以处理这些错误,而不必中断程序的执行。

错误处理就是用于这个目的。下面学习异常和处理他们的方式。
异常在名称空间中定义,大多数异常的名称清晰地说明了它们的用途。在这个示例中,产生的异常称为System.IndexOutOfRangeException,说明我们提供的myArray数据索引不在允许使用索引范围内。只有在异常未处理时,这个信息才会显示出来,应用程序也才会中断执行。

1、异常处理概述

异常处理是一种功能强大的机制,用于处理应用程序可能产生的错误或是其他可以中断程序执行的异常情况。异常处理可以捕捉程序执行所发生的错误。通过异常处理可以有效、快速地构建各种用来处理程序异常情况的程序代码。

异常类 说明
System.ArithmeticException 在算术运算期间发生的异常
System.ArrayTypeMismatchException 当存储一个数组时,如果由于被存储的元素的实际类型与数组的实际类型不兼容而导致存储失败,就会引发此异常
System.DivideByZeroException 在试图用零除整数值时引发
System.IndexOutOfRangeException 在试图用小于零或超出数组界限的下标索引数组时引发
System.InvalidCastException 当从基类型或接口到派生类型的显示转换在运行时失败,就会引发此异常
System.NullReferenceException 在需要使用引用对象的场合,如果使用null引用,就会引发此异常

2、异常处理语句

2.1、try…catch语句

try…catch语句允许在try后面的大括号{}中放置可能发生异常情况的程序代码,对这些程序代码进行监控。在catch后面的大括号{}中则放置处理错误的程序代码,以处理程序发生的异常。try…catch语句的基本格式如下。

try
{  被监控的代码
}
catch(异常类名,异常变量名)
{  异常处理
}
		
			
		

2.2、throw语句

throw语句用于主动引发一个异常,使用throw语句可以在特定的情形下,自行抛出异常。throw语句的基本格式如下。

throw ExObject

ExObject:所要抛出的异常对象,这个异常对象是派生自System.Exception类的对象。

2.3、try…catch…finally语句

将finally语句与try…catch语句结合,形成try…catch…finally语句。finally语句同样以区块的方式存在,它被放在所有try…catch语句的最后面,程序执行完毕,最后都会跳到finally语句区块,执行其中的代码。

try
{  被监控的代码
}
catch(异常类名 异常变量名)
{  异常处理
}
finally
{  程序代码
}
		
			
		

C#语言包含结构化异常处理的语法。用3个关键字可以标记出能处理异常的代码和指令,如果发生异常,就使用这些指令处理异常。用于这个目的的3个关键字是try、catch和finally。它们都有一个关联的代码块,必须在连续的代码行中使用。其基本结构如下:

try
{  ...
}  catch(<exceptionType> e) when(filterIsTrue)  {  <await methodName(e);>  ...  }  finally  {  <await method name>  ...  }
		
			
		

也可以在catch或finally块内使用C# 6引入的await。await关键字用于支持先进的异步编程技术,避免瓶颈,且可以提高应用程序的总体性能和响应能力。

也可以只有try块和finally块,而没有catch块,或者有一个try块和好几个catch块。如果有一个或多个catch块,finally块就是可选的,否则就是必需的。这些代码块的用法如下:

1、try——包含抛出异常的代码(在谈到异常时,C#语言用“抛出”这个术语表示“生成”或“导致”)。

2、catch——包含抛出异常时要执行的代码。catch块可以使用,设置为只响应特定的异常类型,以便提供多个catch块。还可以完全省略这个参数,让通用的catch块响应所有异常。C#6 引入了一个概念“异常过滤”,通过在异常类型表达式后添加when关键字来实现。如果发生了该异常类型,且过滤表达式是true,就执行catch块中的代码。

3、finally——包含始终会执行的代码,如果没有产生异常,则在try块之后执行,如果处理了异常,则在catch块之后执行,或者在未处理的异常“上移到调用堆栈”之前执行。“上移到调用堆栈”表示SEH允许嵌套try…catch…fanally块,可以直接嵌套,也可以在try块包含的函数调用中嵌套。

在try块的代码中出现异常后,一次发生的事件如下,
C#学习记录——错误处理/异常处理
注意:
如果存在两个处理相同异常类型的catch块,就只执行异常过滤器为true的catch块中的代码。如果还存在一个处理相同异常类型的catch块,但没有异常过滤器或异常过滤器是false,就忽略它。只执行一个catch块的代码,catch块的顺序不影响执行流。

3、列出和配置异常

.NET Framework包含许多异常类型,可以在代码中自由抛出和处理这些类型的异常。IDE提供了一个Exceptions对话框,可以检查和编辑可用的异样。使用Debug|Exceptions菜单项(或按下Ctrl+D,E)可以打开该对话框,如下所示:
C#学习记录——错误处理/异常处理

该对话框按照类别和.Net库名称空间列出异常。展开Common Language Runtime Exceptions的加号,就可以看到System名称空间中的异常。
每个异常都可以使用右边的复选框来配置。使用(break when)Thrown时,即使是对于处理的异常,也会进入调试器。

C#学习记录——错误处理/异常处理

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 编程相关 C#学习记录——错误处理/异常处理 https://www.zuozi.net/36161.html

常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务