C# 关于异常处理 try-catch语句的使用

在实际应用中,比如涉及文件读写、网络通信时,会因为文件不存在、权限不够、网络异常等原因引发异常,或者对数据库连接、查询、更新等操作,会因为连接超时、语法错误、唯一约束冲突等引发异常。

看过去的代码,当进行上面的这些操作,大家就通常会发现try-catch语句的身影。

不错。在这些情况下我们就可以应用try-catch语句来捕捉异常了。

1、基本语法:

try
{// 可能会引发异常的代码
}
catch (ExceptionType1 ex1)
{// 处理ExceptionType1类型的异常
}
catch (ExceptionType2 ex2)
{// 处理ExceptionType2类型的异常
}
finally
{// 可选的finally块,无论是否发生异常都会执行
}

这就是它的完整语法。try放置你的处理代码,当发生异常时,就执行cath语句块,假如有finally语句块,即使发生异常也执行。

2、常见用法:

1、捕捉特定异常:

try
{int[] numbers = { 1, 2, 3 ,4 };Console.WriteLine(numbers[5]); // 数组越界异常
}
catch (IndexOutOfRangeException ex)
{Console.WriteLine("发生了数组越界异常:" + ex.Message);
}
  • 具体特定的异常常见的有:
DivideByZeroException当在代码中进行除法运算时,如果除数为零,将引发此异常。
IndexOutOfRangeException索引超出范围的异常,当尝试访问数组或集合中不存在的索引位置时,将引发此异常。
FileNotFoundException文件未找到的异常,当尝试打开或操作不存在的文件时,将引发此异常。
IOException输入/输出操作异常,用于捕获各种与输入/输出相关的异常,如文件操作、网络通信等。
SqlException与数据库操作相关的异常,在进行数据库连接、查询、更新等操作时可能会引发此异常。
FormatException格式化异常,当尝试将字符串转换为其他类型时,如果字符串的格式不符合要求,将引发此异常。
ArgumentNullException参数为空异常,当传递给方法或函数的参数为null时,将引发此异常。
InvalidOperationException无效操作异常,当进行了不符合当前对象状态或上下文的操作时,将引发此异常。
NotSupportedException不支持的操作异常,当尝试执行不受支持的操作时,将引发此异常。
UnauthorizedAccessException未授权访问异常,当尝试访问未授权的资源或执行未授权的操作时,将引发此异常。

2、处理多个异常类型:

try
{int result = Divide(10, 0); // 除以0的异常Console.WriteLine("结果:" + result);
}
catch (DivideByZeroException ex)
{Console.WriteLine("除以0异常:" + ex.Message);
}
catch (ArithmeticException ex)
{Console.WriteLine("算术异常:" + ex.Message);
}

3、使用finally块:

FileStream file = null;
try
{file = new FileStream("file.txt", FileMode.Open);// 使用文件流进行操作
}
catch (IOException ex)
{Console.WriteLine("发生了IO异常:" + ex.Message);
}
finally
{// 确保文件流被关闭file?.Close();
}

4、抛出异常:可参考:C#异常处理-throw语句-CSDN博客

5、使用异常过滤器:我们是可以使用when关键字进行异常筛选的。 

try
{int result = Divide(10, 0);Console.WriteLine("结果:" + result);
}
catch (DivideByZeroException ex) when (ex.Message == "除数不能为0")
{Console.WriteLine("除以0异常:" + ex.Message);
}
catch (DivideByZeroException ex)
{Console.WriteLine("其他除以0异常:" + ex.Message);
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/171076.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于opencv+ImageAI+tensorflow的智能动漫人物识别系统——深度学习算法应用(含python、JS、模型源码)+数据集(四)

目录 前言总体设计系统整体结构图系统流程图 运行环境爬虫模型训练实际应用 模块实现1. 数据准备1)爬虫下载原始图片2)手动筛选图片 2. 数据处理3. 模型训练及保存4. 模型测试1)前端2)后端 系统测试1. 测试效果2. 模型应用1&#…

webshell之内置函数免杀

原始webshell 查杀的点在于Runtime.getRuntime().exec非常明显的特征 利用ProcessBuilder替换Runtime.getRuntime().exec(cmd) Runtime.getRuntime().exec(cmd)其实最终调用的是ProcessBuilder这个函数,因此我们可以直接利用ProcessBuilder来替换Runtime.getRunti…

Python面向对象编程——类方法、实例方法和静态方法总结

在Python面向对象编程中,类方法(class methods)、实例方法(instance methods)和静态方法(static methods)是不同类型的方法,它们有一些联系,但也存在一些明显的区别。 类…

【服务器能干什么】二十分钟搭建一个属于自己的 RSS 服务

如果大家不想自己捣鼓,只是想尝尝鲜,可以在下面留言,我后台帮大家开几个账号玩一玩。 哔哩哔哩【高清版本可以点击去吐槽到 B 站观看】:【VPS服务器到底能干啥】信息爆炸的年代,如何甄别出优质的内容?你可能需要自建一个RSS服务!_哔哩哔哩_bilibili 前言 RSS 服务 市…

二年级 最少需要几个刻度?

娃二年级题目:请你设计一把尺子,用这把尺子一次能画出 1~8厘米八条不同长度的线段。最少需要几个刻度? 答:最少需要 5 个刻度; 方案有: 0, 1, 2, 5, 8 0, 1, 3, 7, 8 0, 1, 4, 6, 8 0, 1, 5, 6, 8 0, 1, 5…

post请求参数全大写后台接不到参数

post请求参数全大写后台接不到参数 开发过程中,我们一般都习惯用驼峰命名法,但是特殊情况要求请求参数全大写(或者首字母大写),测试验证的时候发现,接收不到请求参数。 前端请求传递: 服务端接…

【nlp】3.6 Tansformer模型构建(编码器与解码器模块耦合)

Tansformer模型构建(编码器与解码器模块耦合) 1. 模型构建介绍2 编码器-解码器结构的代码实现3 Tansformer模型构建过程的代码实现4 小结1. 模型构建介绍 通过上面的小节, 我们已经完成了所有组成部分的实现, 接下来就来实现完整的编码器-解码器结构耦合. Transformer总体架…

burpsuite的大名早有耳闻,近日得见尊荣,倍感荣幸

问题: burpsuite中文乱码何解? burpsuite 与君初相识,犹如故人归。 burpsuite早有耳闻,近日得见真容,果然非同凡响。 Burp Suite is a comprehensive suite of tools for web application security testing. burp …

共射放大电路削顶和射随电路削底的问题

打算做了一个中频放大电路,用两级共射放大电路放大400倍左右。结果发现波形失真很厉害。仔细观察波形,发现第二级削底,断开第一级到第二级的耦合电容后,第一级输出正常了。这应该是第一级带了负载。导致被削顶。到了第二级反相后就…

spark的算子

spark的算子 1.spark的单Value算子 Spark中的单Value算子是指对一个RDD中的每个元素进行操作,并返回一个新的RDD。下面详细介绍一些常用的单Value算子及其功能: map:逐条映射,将RDD中的每个元素通过指定的函数转换成另一个值&am…

JavaScript基础—运算符、表达式和语句、分支语句、循环语句、综合案例-ATM存取款机

版本说明 当前版本号[20231125]。 版本修改说明20231125初版 目录 文章目录 版本说明目录JavaScript 基础 - 第2天运算符算术运算符赋值运算符自增/自减运算符比较运算符逻辑运算符运算符优先级 语句表达式和语句分支语句if 分支语句if双分支语句if 多分支语句三元运算符&am…

spring事务管理快速入门(以转账为例)

spring事务管理(以转账为例) 概述 Spring事务管理提供了一种在应用程序中管理事务的机制,它抽象了底层的事务管理细节,使得开发者可以更加专注于业务逻辑的实现,而不必过多关心事务的处理。以下是Spring事务管理的一…

Kotlin学习——kt里的集合List,Set,Map List集合的各种方法之Int篇

Kotlin 是一门现代但已成熟的编程语言,旨在让开发人员更幸福快乐。 它简洁、安全、可与 Java 及其他语言互操作,并提供了多种方式在多个平台间复用代码,以实现高效编程。 https://play.kotlinlang.org/byExample/01_introduction/02_Functio…

Win10/Win11 使用Wsl的Ubuntu 子系统搭建CGO环境,相当于Ubuntu下开发。GO环境CGO搭建,支持交叉编译

背景: 之前是使用Mac 开发,最近切换到win11下面。发现使用cgo编译有问题。 下面记载了我的使用方法。 环境: win11(win10理论一样) win11 安装了wsl2的环境,并且安装了ubuntu系统。 在win11 上面安装了g…

vue3(二)-基础入门

一、列表渲染 of 和 in 都是一样的效果 html代码&#xff1a; <div id"app"><ul><li v-for"item of datalist">{{ item }}</li></ul><ul><li v-for"item in dataobj">{{ item }}</li></u…

Flask,uWSGI,nginx的理解

文章目录 前言与背景理解 - FlaskuWSGInginx理解 - nginx理解 - FlaskuWSGI理解 - vuedjangonginx 前言与背景 此篇文章是针对小白的一篇理解Flask&#xff0c;uWSGI&#xff0c;nginx的文章&#xff0c;只介绍了理解&#xff0c;并没有介绍如何部署。 由于工作需要使用flask…

npm pnpm yarn(包管理器)的安装及镜像切换

安装Node.js 要安装npm&#xff0c;你需要先安装Node.js。 从Node.js官方网站&#xff08;https://nodejs.org&#xff09;下载并安装Node.js。 根据你的需要选择相应的版本。 一路Next&#xff0c;直到Finish 打开CMD&#xff0c;输入命令来检查Node.js和npm是否成功安装 nod…

Gin 学习笔记02-参数获取

Gin 参数获取 1、获取url 参数2、获取动态 url 参数3、获取 form 表单数据 1、获取url 参数 Query()GetQuery()QueryMap()DefaultQuery() package mainimport ("fmt""github.com/gin-gonic/gin""net/http" )func _query(c *gin.Context) {// 1…

Docker Swarm总结+基础、集群搭建维护、安全以及集群容灾(1/4)

博主介绍&#xff1a;Java领域优质创作者,博客之星城市赛道TOP20、专注于前端流行技术框架、Java后端技术领域、项目实战运维以及GIS地理信息领域。 &#x1f345;文末获取源码下载地址&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb;…