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);
}
相关文章:
C# 关于异常处理 try-catch语句的使用
在实际应用中,比如涉及文件读写、网络通信时,会因为文件不存在、权限不够、网络异常等原因引发异常,或者对数据库连接、查询、更新等操作,会因为连接超时、语法错误、唯一约束冲突等引发异常。 看过去的代码,当进行上…...
【LeeCode】26.删除有序数组中的重复项
给你一个 非严格递增排列 的数组 nums ,请你原地删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素的数量为 k ,你需…...
4-Docker命令之docker create
1.docker create介绍 docker create命令是用于创建一个新的容器,等价于docker run -d命令,但是与docker run -d不同的是,docker create创建的容器并未实际启动,需要指定docker start命令启动。 2.docker create用法 docker create [参数] [root@centos79 ~]# docker cr…...
leetcode每日一题33
86.分隔链表 因为对链表中的一个节点进行更换位置的操作需要知道该节点的上一个节点 所以建立一个虚拟头节点 ListNode* pnew ListNode(-201,head);根据题意,我们需要找到第一个大于x或等于x的节点large 并且将第一个大于或等于x的节点large后的所有小于x的节点都…...
性能测试【一】:Jmeter的常用操作
性能测试【一】:Jmeter的常用操作 一、使用命令行方式运行Jmeter1、为什么2、怎么用3、示例4、结果文件 二、生成动态报告1、准备2、命令3、报告示例4、报告释义 三、使用问题汇总 推荐使用命令行运行,GUI方式会经常卡死,尤其跑稳定性 一、使…...
【JAVA】SpringBoot + mongodb 分页、排序、动态多条件查询及事务处理
【JAVA】SpringBoot mongodb 分页、排序、动态多条件查询及事务处理 1.引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- mongodb ↓ -->&…...
nrm安装及使用
一、介绍 nrm 是一个 Node.js 的 registry 管理工具,它允许你快速地在不同的 npm registry 之间进行切换。通过使用 nrm,你可以方便地将 npm 的 registry 切换为淘宝镜像、npm 官方镜像或者其他定制的镜像,以加快包的下载速度。nrm仓库请点击…...
docker报错standard init linux.go:228 exec user process caused: exec format error
1、报错 使用Dockerfile自己做的服务镜像,docker run时启动失败,报错如下: standard init linux.go:228 exec user process caused: exec format error2、原因一 当前服务器的CPU架构和构建镜像时的CPU架构不兼容。比如做镜像是在arm机器下…...
Docker 的基本概念和优势,以及在应用程序开发中的实际应用。
Docker 是一种容器化技术,它将一个应用程序及其所有依赖项打包在一起,形成一个独立的、可移植的容器。这个容器可以在任何支持 Docker 的操作系统上运行,而且具有很好的可移植性和可扩展性。以下是 Docker 的基本概念和优势: 镜像…...
libmosquitto库的一个bug,任务消息id(mid)分配后不起作用
代码如图所示: 当订阅了所有主题后,每个主题的mid是他们的下标索引加100的数字,可是实际打印出来的值是: mid依然是1,2,这个参数在这里失效了,不知道是bug还是mqtt的什么机制?...
亚马逊云科技re:Invent大会:云计算与生成式AI共筑科技新局面,携手构建未来
随着科技的飞速发展,云计算和生成式 AI 已经成为了推动科技进步的重要力量。这两者相互结合,正在为我们创造一个全新的科技局面。 亚马逊云科技的re:Invent大会再次证明了云计算和生成式AI的强大结合正在塑造科技的新未来。这次大会聚焦了云计算的前沿技…...
Docker 部署 Nacos(单机),利用 MySQL 数据库存储配置信息
前面的话 默认你已经懂 Docker、docker-compose Nacos版本:v2.2.3 MySQL 版本:8.2.0 一、下载 打开 Nacos 官网 官网地址:官网 点击手册 左侧 Nacos Docker 克隆项目到本地 # 克隆项目,如果提示连接不到 github 请自行解决 …...
【LeeCode】35.搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 你可以假设数组中无重复元素。 解: class Solution {public int searchInsert(int[] nums, int target) {int …...
18.天气小案例
1►新增带Layout组件的页面 直接在views文件夹下面新增weather.vue。然后随便写一个123,现在先让我们页面能跳过去先。 让页面能跳过去,有好几种方法: 1、在菜单管理自己添加一个菜单,然后把菜单分配给某个角色,再把…...
医保线上购药系统:代码驱动的医疗创新
医保线上购药系统,这是一个融合技术和医疗的创新典范。本文将通过简单的技术代码示例,为您揭示这一系统是如何通过技术驱动医疗创新,为用户提供更智能、便捷的健康管理体验的。 1. 前端界面开发 使用React框架,我们可以轻松构建…...
VMware OpenSLP漏洞解决方案
PS:早期为客户做VMware检测的方法,大家如有遇到可参考 OpenSLP堆溢出漏洞攻击大量ESXI服务器,该漏洞编号为CVE-2021-21974,由 OpenSLP 服务中的堆溢出问题引起 大于以下版本则不受影响 ESXi versions 7.x prior to ESXi7…...
UEditor编辑器实现上传图片自动加水印功能PHP源码
UEditor编辑器是百度旗下的免费开源富文本编辑器,使用很方便,但是也有缺点,比如,上传图片不能自动添加水印,下边我们就来说说如何在UEditor编辑器中自动实现上传图片添加水印功能,操作很简单。 首先找到UEditor/PHP目录下的Uploader.class.php的文件,打开该文件,找到以…...
【从浅识到熟知Linux】基本指定之find、grep、head和tail
🎈归属专栏:从浅学到熟知Linux 🚗个人主页:Jammingpro 🐟每日一句:一篇又一篇,学写越上头。 文章前言:本文介绍find、grep、head和tail指令用法并给出示例和截图。 文章目录 find基本…...
【云备份】文件操作实用工具类设计
文章目录 为什么要单独设计文件工具类?整体实现Filesize ——文件大小stat接口 LastMTime ——最后一次修改时间LastATime —— 最后一次访问时间FileName —— 文件名称GetPostLen ——获取文件指定位置 指定长度的数据GetContnet —— 读取文件数据SetContent ——…...
LeetCode Hot100 199.二叉树的右视图
题目: 给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 方法(灵神):先递归右子树,再递归左子树,在递归的同…...
别再只盯着PCIe了!手把手带你理解CXL 3.1协议中的缓存一致性(CXL.cache)到底怎么玩
CXL 3.1缓存一致性实战:从协议原理到性能调优的深度解析 当你在异构计算环境中遇到GPU与CPU之间的数据同步瓶颈时,传统DMA方式的高延迟和低效带宽利用是否让你感到束手无策?CXL.cache协议正是为解决这一痛点而生。本文将带你深入CXL 3.1的缓存…...
淘特API签名破解实录:从抓包到算法还原的完整踩坑指南
淘特API签名逆向工程实战:从抓包到算法还原的深度解析 1. 逆向工程基础与环境准备 逆向分析电商平台API签名机制的第一步是搭建合适的分析环境。对于淘特APP的x-sign参数分析,我们需要准备以下工具链: 抓包工具:Charles或Fiddler用…...
深度学习——交叉熵损失函数
调用示例 loss_fun F.cross_entropy()loss loss_fun(y_pred, labels)一句话描述 交叉熵损失函数是描述:预测的概率分布和真实概率分布之间差异的损失函数。差异越大,损失值越高;差异越小,损失值越低。 举例说明 假设有一只猫的图…...
【反蒸馏实战 10】AI 训练师 / 提示词工程师 :当这个职业本身就是 AI 时代产物,你的“反蒸馏”之路在哪?@AI训练师从“写手”到“系统策略师”的进化实战
摘要:2025-2026年,Prompt Engineer岗位招聘量暴跌65%,这个曾被追捧的“黄金职业”为何迅速“被蒸馏”?核心原因是AI已掌握提示词编写技巧,单纯的Prompt技能不再稀缺。本文深度解析AI训练师的职业危机本质,拆解从“Prompt工匠”到“AI系统策略师”的三层跃迁路径:从思维层…...
novel-downloader:如何轻松下载全网小说?多平台小说下载终极指南
novel-downloader:如何轻松下载全网小说?多平台小说下载终极指南 【免费下载链接】novel-downloader 一个可扩展的通用型小说下载器。 项目地址: https://gitcode.com/gh_mirrors/no/novel-downloader 你是否曾因网络不稳定而无法追更心爱的小说&…...
别再拼凑多个工具了!这套GEO系统自带排名追踪+智能出价+内容优化+数据大屏
温馨提示:文末有资源获取方式最近在帮团队搭建AI搜索渠道的监测体系,试了一圈方案,发现一个很尴尬的问题:排名追踪要开一个会员,内容优化要换一个平台,数据看板还得再折腾一遍BI工具……几个工具来回切&…...
终极指南:免费获取 macOS 风格鼠标指针,让你的 Windows/Linux 桌面焕然一新
终极指南:免费获取 macOS 风格鼠标指针,让你的 Windows/Linux 桌面焕然一新 【免费下载链接】apple_cursor Free & Open source macOS Cursors. 项目地址: https://gitcode.com/gh_mirrors/ap/apple_cursor 想要为你的 Windows 或 Linux 系统…...
鸿蒙应用开发者激励计划2026常见问题FAQ
1、什么是鸿蒙应用开发者激励计划2026? 为了鼓励更多开发者拥抱鸿蒙生态,打造全场景时代的极致体验,我们正式推出“鸿蒙应用开发者激励计划 2026”。 共创鸿蒙生态繁荣未来。 2、本次激励计划持续到什么时间? 本次激励计划报名截…...
如何在Docker部署时以非root用户运行_容器内权限降级
容器默认以root运行会引发权限错乱、K8s启动失败等问题,根本原因是镜像未显式设置非root用户;正确做法是在Dockerfile中用adduser创建指定UID用户、chown修改目录属主,并将USER置于root操作之后。为什么容器里默认用 root 是个真问题docker 容…...
微服务系列(二) 微服务拆分不是拍脑袋-WMS怎么拆
微服务拆分不是拍脑袋,WMS 怎么拆?用 DDD 给仓储系统划边界,我们踩过的弯路第一次拆分的"翻车"经历 说实话,我第一次拆微服务的时候,自信满满。 那时候公司有个单体 WMS(仓储管理系统)…...
