当前位置: 首页 > news >正文

C# 异常处理、多个异常、自定义异常处理

C# 异常

异常是为处理异常的发生而设计的,这些特殊情况会改变程序执行的正常流程。 引发或引发异常。

在执行应用期间,许多事情可能出错。 磁盘可能已满,我们无法保存文件。 当我们的应用尝试连接到站点时,Internet 连接可能会断开。 所有这些都可能导致我们的应用崩溃。 程序员有责任处理可以预期的错误。

trycatchfinally关键字用于处理异常。

Program.
using System;namespace DivisionByZero
{class Program{static void Main(string[] args){int x = 100;int y = 0;int z;try{z = x / y;} catch (ArithmeticException e){Console.WriteLine("An exception occurred");Console.WriteLine(e.Message);}}}
}

在上面的程序中,我们有意将数字除以零。 这会导致错误。

try
{z = x / y;
}

容易出错的语句放置在try块中。

 catch (ArithmeticException e)
{Console.WriteLine("An exception occurred");Console.WriteLine(e.Message);
}

异常类型跟随catch关键字。 在我们的情况下,我们有一个ArithmeticException。 由于算术,转换或转换操作中的错误而引发此异常。 发生错误时,将执行catch关键字之后的语句。 发生异常时,将创建一个异常对象。 从该对象中,我们获得Message属性并将其打印到控制台。

$ dotnet run
An exception occurred
Attempted to divide by zero.

代码示例的输出。

C# 未捕获的异常

当前上下文中任何未捕获的异常都会传播到更高的上下文,并寻找适当的 catch 块来处理它。 如果找不到任何合适的 catch 块,则.NET 运行时的默认机制将终止整个程序的执行。

Program.
using System;namespace UcaughtException
{class Program{static void Main(string[] args){int x = 100;int y = 0;int z = x / y;Console.WriteLine(z);}}
}

在此程序中,我们除以零。 没有自定义异常处理。

$ dotnet runUnhandled Exception: System.DivideByZeroException: Division by zeroat UncaughtException.Main () [0x00000]

C# 编译器给出了以上错误消息。

C# IOException

发生 I / O 错误时,将抛出IOException。 在下面的示例中,我们读取文件的内容。

Program.
using System;
using System.IO;namespace ReadFile
{class Program{static void Main(string[] args){var fs = new FileStream("langs.txt", FileMode.OpenOrCreate);try{var sr = new StreamReader(fs);string line;while ((line = sr.ReadLine()) != null){Console.WriteLine(line);}}catch (IOException e){Console.WriteLine("IO Error");Console.WriteLine(e.Message);}finally{Console.WriteLine("Inside finally block");if (fs != null){fs.Close();}}}}
}

始终执行finally关键字之后的语句。 它通常用于清理任务,例如关闭文件或清除缓冲区。

} catch (IOException e)
{Console.WriteLine("IO Error");Console.WriteLine(e.Message);
} 

在这种情况下,我们捕获了特定的IOException异常。

} finally
{Console.WriteLine("Inside finally block");if (fs != null)  {fs.Close();}
}

这些行确保关闭文件处理程序。

$ cat langs.txt
C#
Java
Python
Ruby
PHP
JavaScript

这些是langs.txt文件的内容。

$ dotnet run
C#
Java
Python
Ruby
PHP
JavaScript
Inside finally block

这是程序的输出。

我们使用 cat 命令和程序输出显示 langs 文件的内容。

C# 多个异常

我们经常需要处理多个异常。

Program.
using System;
using System.IO;namespace MultipleExceptions
{class Program{static void Main(string[] args){int x;int y;double z;try{Console.Write("Enter first number: ");x = Convert.ToInt32(Console.ReadLine());Console.Write("Enter second number: ");y = Convert.ToInt32(Console.ReadLine());z = x / y;Console.WriteLine("Result: {0:N} / {1:N} = {2:N}", x, y, z);}catch (DivideByZeroException e){Console.WriteLine("Cannot divide by zero");Console.WriteLine(e.Message);}catch (FormatException e){Console.WriteLine("Wrong format of number.");Console.WriteLine(e.Message);}}}
}

在此示例中,我们捕获了各种异常。 请注意,更具体的异常应先于一般的异常。 我们从控制台读取两个数字,并检查零除错误和数字格式错误。

$ dotnet run
Enter first number: we
Wrong format of number.
Input string was not in a correct format.

运行示例,我们得到了这个结果。

C# 自定义异常

定制异常是从System.Exception类派生的用户定义的异常类。

Program.
using System;namespace CustomException
{class BigValueException : Exception{public BigValueException(string msg) : base(msg) { }}class Program{static void Main(string[] args){int x = 340004;const int LIMIT = 333;try{if (x > LIMIT){throw new BigValueException("Exceeded the maximum value");}}catch (BigValueException e){Console.WriteLine(e.Message);}}}
}

我们假定存在无法处理大量数字的情况。

class BigValueException : Exception

我们有一个BigValueException类。 该类派生自内置的Exception类。

const int LIMIT = 333;

大于此常数的数字在我们的程序中被视为“大”。

public BigValueException(string msg) : base(msg) {}

在构造函数内部,我们称为父级的构造函数。 我们将消息传递给父母。

if (x > LIMIT)
{throw new BigValueException("Exceeded the maximum value");
}

如果该值大于限制,则抛出自定义异常。 我们给异常消息“超出最大值”。

} catch (BigValueException e)
{Console.WriteLine(e.Message);
}

我们捕获到异常并将其消息打印到控制台。

$ dotnet run
Exceeded the maximum value

相关文章:

C# 异常处理、多个异常、自定义异常处理

C# 异常 异常是为处理异常的发生而设计的,这些特殊情况会改变程序执行的正常流程。 引发或引发异常。 在执行应用期间,许多事情可能出错。 磁盘可能已满,我们无法保存文件。 当我们的应用尝试连接到站点时,Internet 连接可能会断…...

【从零开始的LeetCode-算法】3210. 找出加密后的字符串

给你一个字符串 s 和一个整数 k。请你使用以下算法加密字符串: 对于字符串 s 中的每个字符 c,用字符串中 c 后面的第 k 个字符替换 c(以循环方式)。 返回加密后的字符串。 示例 1: 输入: s "dart&…...

redis linux 安装

下载解压 https://download.redis.io/releases/ tar -zvxf ----redis-7.4.1编译 进入目录下 # redis 依赖c yum install gcc-cmake可能会有问题,所以记得换源# 安装到 /usr/local/redis make PREFIX/usr/local/redis installcd src ./redis-serverredis.confi…...

springboot006基于SpringBoot的网上订餐系统(源码+包运行+LW+技术指导)

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问…...

【QNX】QNX侧如何抓取日志?

🦋slog2info 是 QNX 实时操作系统中的一个实用工具,用于读取和解析 QNX 的系统日志(System Logger v2,简称 slog2)。 🦋slog2 是 QNX 提供的用于记录系统和应用程序日志信息的服务,它比传统的 syslog 服务更加强大和灵活,能够处理大量日志信息,并提供高级的过滤和检…...

深度学习:计算卷积神经网络中输出特征图尺寸的关键公式

计算卷积神经网络中输出特征图尺寸的关键公式 在设计卷积神经网络(CNN)时,准确计算每个卷积层的输出特征图尺寸是至关重要的。这不仅关系到网络的结构设计,也直接影响参数优化和整体性能。适当的计算可以确保网络层正确连接&…...

【惠州大亚湾】之维修戴尔服务器DELLR730XD

1:广东省惠州市大亚湾某游客服务中心来电报修1台DELL PowerEdge R730xd服务器无法正常开机的问题。听该负责描述这台服务器因为服务中心电力切换导致意外关机,来电后发现就无法正常开机了。所以找到我们希望配合维修。 2:该机器由于特别着急…...

跟我学C++中级篇——Design Patterns的通俗说法

一、设计模式 Design patterns,软件设计模式,它是什么?很多初学者会被这种高大上的东西给唬住。其实,所有的书籍上都说得很清楚,只是它们把这种说法说得很高大上而已。举个简单例子,在抖音上经常可以看到介…...

消息队列原理面试题及参考答案

什么是消息队列? 消息队列是一种在不同应用程序组件或者系统之间进行异步通信的中间件技术。它就像是一个信息的 “中转站”。从技术层面来讲,消息队列主要由消息生产者、消息队列本身和消息消费者这几个核心部分构成。 消息生产者负责创建消息并将其发送到消息队列中。这些消…...

有序数组的平方(leetcode 977)

一个数组&#xff0c;返回一个所有元素的平方之后依然是一个有序数组。&#xff08;数组中含负数&#xff09; 解法一&#xff1a;暴力解法 所有元素平方后再使用快速排序法重新排序&#xff0c;时间复杂度为O(nlogn)。 class Solution { public:vector<int> sortedSqu…...

网页抓取API,让数据获取更简单

网页抓取的过程通常分为以下步骤&#xff0c;尤其是在面对静态网页时&#xff1a; 获取页面 HTML&#xff1a;使用 HTTP 客户端下载目标页面的 HTML 内容。解析 HTML&#xff1a;将下载的 HTML 输入解析器&#xff0c;准备提取内容。提取数据&#xff1a;利用解析器功能&#…...

23.<Spring图书管理系统(强制登录版本)>

在前面两篇&#xff0c;我们基本上实现了图书管理系统所有的功能&#xff0c;但是我们发现没有登录也能对其进行修改。这是非常不安全的。因此这篇文章我们学习如何进行强制登录。只有登录进去才能进行操作。 这不是一个对外开放的项目 这篇文章我们将改写图书管理系统为强制登…...

【插件】重复执行 pytest-repeat

安装 pip3 install pytest-repeat 用法 1.命令行 pytest --count num pytest --count 32.装饰器 pytest.mark.repeat(num) #num运行次数 pytest.mark.repeat(5)#执行结果如下&#xff1a;...

pip/conda install bugs汇总

DNSResolutionError 一直不行&#xff0c;惯防火墙还是不行&#xff0c;可能导致漏洞了&#xff1b; 解决方案&#xff1a; reboot下次try可以刷新DNS缓存: resolvectl flush-cachespip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host‘mirrors.a…...

通过shell脚本分析部署nginx网络服务

通过shell脚本分析部署nginx网络服务 1.接收用户部署的服务名称 [rootlocalhost xzy]# vim 1.sh [rootlocalhost xzy]# chmod x 1.sh [rootlocalhost xzy]# ./1.sh2.判断服务是否安装 已安装&#xff1b;自定义网站配置路径为/www&#xff1b;并创建共享目录和网页文件&…...

Java基础——继承和多态

目录 一、继承 继承的定义&#xff1a; 继承的基本用法&#xff1a; 如何调用父类的方法&#xff1f; 二、多态 多态性的好处 多态中的强制类型转换&#xff1a; 包的命名规则——域名倒叙 一、继承 继承的定义&#xff1a; 继承是面向对象编程中的一种机制&#xff0c…...

长江存储嵌入式面试题及参考答案

构造函数、析构函数可以为虚函数吗,为什么? 构造函数最好不要是虚函数。原因如下: 从对象的生命周期角度来看,虚函数的调用是通过虚函数表(vtable)来实现的。而在构造函数执行的时候,对象还没有完全构造好,vtable 可能还没有被正确地初始化。如果构造函数是虚函数,在…...

WordPress设置自动更新CSS版本号

WordPress 通常会在引用 CSS 文件时添加版本号参数&#xff08;?verx.x.x&#xff09;。如果版本号未更新&#xff0c;浏览器可能继续加载旧的文件。 解决方法&#xff1a;确保你在 functions.php 文件中正确加载了 CSS 文件&#xff0c;并动态更新版本号。例如在functions.p…...

【Qt聊天室】客户端实现总结

目录 1. 项目概述 2. 功能实现 2.1 主窗口设计 2.2 功能性窗口 2.3 主界面功能实现 2.4 聊天界面功能实现 2.5 个人信息功能开发 2.6 用户信息界面设置功能 2.7 单聊与群聊 2.8 登录窗口 2.9 消息功能 3. 核心设计逻辑 3.1 核心类 3.2 前后端交互与DataCenter 4…...

服务器数据恢复—raid5阵列故障导致上层系统分区无法识别的数据恢复案例

服务器数据恢复环境&#xff1a; 某品牌DL380服务器&#xff0c;服务器中三块SAS硬盘组建了一组raid5阵列。服务器安装Windows Server操作系统&#xff0c;划分了3个分区&#xff0c;D分区存放数据库&#xff0c;E分区存放数据库备份。 服务器故障&#xff1a; RAID5阵列中有一…...

mysql bin log分析

centos7 部署collabora office (yum版 与 docker)_collabora office部署-CSDN博客 1.下载polardb的bin log文件 show binary logs; mysqlbinlog -u 用户名 -p -h 地址 --read-from-remote-server --raw mysql-bin.001768 mysqlbinlog --no-defaults --databasexxx --base64-…...

深入理解 Vue 3 中的 emit

深入理解 Vue 3 中的 emit 在 Vue 3 中&#xff0c;组件通信是开发中非常重要的一部分&#xff0c;其中通过 emit 实现父子组件通信是最常见的方式之一。emit 的作用是&#xff1a;子组件可以通过触发自定义事件将数据传递给父组件。 在本篇文章中&#xff0c;我们将从以下几…...

#lwIP 的 Raw API 使用指南

1. 简介 lwIP&#xff08;Lightweight IP&#xff09;是一个为嵌入式系统设计的开源轻量级 TCP/IP 协议栈。它旨在提供尽可能小的内存占用和高效的性能&#xff0c;适用于资源受限的设备&#xff0c;如物联网设备、路由器和工业控制系统。lwIP 支持多种协议&#xff0c;包括 I…...

Elasticsearch开启认证及kibana密码登陆

Elasticsearch不允许root用户运行,使用root用户为其创建一个用户es,为用户es配置密码,并切换到es用户。 adduser elastic passwd elastic su elasticElasticsearch(简称ES)是一个基于Lucene的搜索服务器。它提供了一个分布式、多用户能力的全文搜索引擎,基于RESTful web…...

【论文阅读】Large Language Models for Equivalent Mutant Detection: How Far Are We?

阅读笔记&#xff1a;Large Language Models for Equivalent Mutant Detection: How Far Are We? 1. 来源出处 本文发表于《ISSTA’24, September 16–20, 2024, Vienna, Austria》会议&#xff0c;由Zhao Tian, Honglin Shu, Dong Wang, Xuejie Cao, Yasutaka Kamei和Junji…...

vue2 面试题带答案,万字总结

1. 什么是 vue Vue 是一套用于构建用户界面的渐进式框架。Vue.js 的主要特点&#xff1a;渐进式框架、声明式渲染、组件化、响应式数据绑定等&#xff1b; 2、MVC 和 MVVM 区别 MVC 是模型(model)&#xff0d;视图(view)&#xff0d;控制器(controller)&#xff0c;控制器负责…...

git的常用用法(最简精华版)

一、工作区域&#xff08;工作区&#xff0c;暂存区&#xff0c;本地仓库&#xff09; 1、工作区 当前正在使用的文件 2、暂存区 已使用add命令提交的工作区的文件&#xff0c;会保存到暂存区 3、本地仓库 已使用commit命令提交的暂存区的文件&#xff0c;会保存到本地仓库。…...

哥德巴赫猜想渐行渐远

我现在的工作&#xff0c;表明经典分析可能出了问题&#xff0c;如此则连Vinogradov的三素数定理都不成立了&#xff0c;更别说基于L-函数方程的陈氏定理“12”了。事实上即使L-函数方程成立&#xff0c;由于我指出Siegel定理不成立&#xff0c;陈景润和张益唐的工作就不成立。…...

Spring Boot应用开发实战:构建高效、可维护的Web应用

Spring Boot应用开发实战:构建高效、可维护的Web应用 在当今快速迭代的软件开发环境中,Spring Boot凭借其“约定优于配置”的理念,迅速成为Java开发者构建微服务及Web应用的首选框架。它不仅简化了Spring应用的初始搭建以及开发过程,还通过自动配置、嵌入式服务器等特性,…...

keep-alive多级页面缓存实现

文章目录 keep-alive多级页面缓存实现只适用于页面是否缓存状态不变的情况对于上面的问题提供一种解决方案 keep-alive多级页面缓存实现 只适用于页面是否缓存状态不变的情况 网上有一种很普遍的教程&#xff0c;不使用keep-alive的include属性&#xff0c;而是通过在路由表中…...

wordpress单独页面/东莞营销网站建设直播

前言 继续ctf的旅程 攻防世界Misc高手进阶区的3分题 本篇是3-11的writeup 发现攻防世界的题目分数是动态的 就仅以做题时的分数为准了 解题过程 下下来一个png图片 扔进stegsolve 发现PK开头 zip文件 save bin 改后缀 解压 弹出已损坏 用winrar自带的修复 成功修复 得到一…...

给客户做网站图片侵权/seo代码优化步骤

它是一个替代变量-sql * plus功能-不能这样工作.您必须调用undefine& slno或接受slno …使其接受其他输入,但是这些也是sqlplus,而不是pl / sql命令,因此您将无法在循环中调用它们,您可能在这里唯一能做的就是INSERT INTO TEST_TABLE VALUES(&slno1,SYSDATE);INSERT IN…...

淄博公司做网站/成都搜狗seo

Connection:用于连接数据源Command:对数据源执行命令DataReader:在只读和只写的连接模式下从数据源读取数据.DataAdpter:从数据源读取数据并使用所读取的数据填充数据集对象.建立Connection 1,用SqlConnection连接Sql Server (1)引入命名空间: using System.Data.SqlClient; (2…...

自建网站主题及策划/国内做网站比较好的公司

note: within this loop 注意&#xff1a;在这个循环中 段错误 您的程序发生段错误&#xff0c;可能是数组越界&#xff0c;堆栈溢出&#xff08;比如&#xff0c;递归调用层数太多&#xff09;等情况引起 改正 把arr[20] 改成arr[21] #include<iostream> using namesp…...

永平建设有限公司网站/seo推广培训

目录 引言 中缀表达式转后缀表达式 逆波兰表达式求值 栈的压入&#xff0c;弹出序列 栈的实现 括号匹配问题 队列 用栈实现队列 引言 1.什么是栈&#xff1f; 一种数据结构&#xff0c;先进后出。 2.什么是Java虚拟机栈&#xff1f; JVM stack只是JVM当中的一块内存&#xf…...

wordpress导航菜单动画/seo搜索优化是什么

正文共&#xff1a; 8098字 5图预计阅读时间&#xff1a; 21分钟项目仓库https://github.com/EthanYan6/E-commerce-sites.git结合代码查看笔记&#xff0c;效果更佳。笔记只是记录重点或者难点。每日分享It is our attitude at the beginning of a difficult task which, more…...