c# 异常处理

异常类

.NET Framework 类库中的所有异常都派生于 Exception 类,异常包括系统异常应用异常

默认所有系统异常派生于 System.SystemException,所有的应用程序异常派生于 System.ApplicationException。

系统异常一般不可预测,比如内存堆栈溢出,空对象引用,权限限制,硬件读取错误等等。

应用程序异常一般可以预测,比如文件对象找不到啦,值不在范围内啦,数据类型不一致等等,设计,处理逻辑可以判断的。

常见的系统异常类                         说明

System.OutOfMemoryException    用 new 分配内存失败

System.StackOverflowException 递归过多、过深

System.NullReferenceException 对象为空

Syetem.IndexOutOfRangeException 数组越界

System.ArithmaticException  算术操作异常的基类

System.DivideByZeroException 除零错误

System.IO.IOException  IO操作期间发生错误时引发的异常

System.Net.WebException 此异常与网络有关

System.Data.SqlClient.SqlException 异常与数据库(特别是SQLServer)有关

System.InvalidCastException 由于未定义强制类型转换而无法从一种类型转换为另一种类型时,将引发该错误

在 C# 语言中异常与异常处理语句

 try ... catch... finally

try:

用于检查发生的异常,并帮助发送任何可能的异常。

catch:

以控制权更大的方式处理错误,可以有多个 catch 子句。

可将具有不同异常类的多个 catch 块链接在一起。 代码中 catch 块的计算顺序为从上到下,但针对引发的每个异常,仅执行一个 catch 块。 将执行指定所引发的异常的确切类型或基类的第一个 catch 块。 如果没有 catch 块指定匹配的异常类,则将选择不具有类型的 catch 块(如果语句中存在)。 务必首先定位具有最具体的(即,最底层派生的)异常类的 catch 块。

可以省略不使用。但catch 和finally 至少有一个。

finally:

无论是否引发了异常,finally 的代码块都将被执行。

可以省略不使用。但catch 和finally 至少有一个。

finally 块可用于发布资源(如文件流、数据库连接和图形句柄)而无需等待运行时中的垃圾回收器来完成对象。

throw:

异常都是使用 throw 关键字创建而成。当需要抛出一个异常时,或者自定义异常,可以用 throw 关键字.

string first = args.Length >= 1 ? args[0]

    : throw new ArgumentException("Please supply at least one argument.");

异常过滤器

指定异常筛选器,该筛选器进一步检查异常并确定相应的 catch 块是否处理该异常。 异常筛选器是遵循 when 关键字的布尔表达式。布尔表达式为true,catch块就处理异常。布尔表达式为false,就跳过该异常。

try

{

    var result = Process(-3, 4);

    Console.WriteLine($"Processing succeeded: {result}");

}

catch (Exception e) when (e is ArgumentException || e is DivideByZeroException)

{

    Console.WriteLine($"Processing failed: {e.Message}");

}

自定义异常

    class MyException : Exception

    {

        public MyException(string message)

            : base(message)

        {

        }

}

string first = args.Length >= 1 ? args[0]

    : throw new MyException("Please supply at least one argument.");

注意:
  1. 较高层次上下文捕捉较低抛出的异常。

try

{

 // Code to try goes here.

}

catch (SomeSpecificException ex)

{

// Code to handle the exception goes here.

 }

Finally

 {

// Code to execute after the try (and possibly catch) blocks // goes here.

 }

FileStream? file = null;

FileInfo fileinfo = new System.IO.FileInfo("./file.txt");

 Try

 {

file = fileinfo.OpenWrite();

 file.WriteByte(0xF);

}

finally

{ // Check for null because OpenWrite might have failed.

file?.Close();

}

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

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

相关文章

代码库管理工具Git介绍

阅读本文同时请参阅-----免费的Git图形界面工具sourceTree介绍 Git是一个分布式版本控制系统,它可以帮助开发者跟踪和管理代码历史。Git的命令行工具是使用Git的核心方式,虽然它可能看起来有些复杂,但是一旦掌握了基本命令,你…

stable-diffusion-webui-forge 介绍,安装,运行

一 stable-diffusion-webui-forge 介绍 stable-diffusion-webui-forge 的作用和stable-diffusion-webui一样,但性能上作了优化,说得上是是stable-diffusion-webui优化版,本人在使用stable-diffusion-webui时偶尔会有内存不够报错。本人的环境…

‘grafana.ini‘ is read only ‘defaults.ini‘ is read only

docker安装grafana 关闭匿名登录情况下的免密登录遇到问题 grafana.ini is read only defaults.ini is read only 参考回答(Grafana.ini giving me the creeps - #2 by bartweemaels - Configuration - Grafana Labs Community Forums) 正确启动脚本 …

《系统架构设计师教程(第2版)》第5章-软件工程基础知识-05-净室软件工程(CSE)

文章目录 1. 概述2. 理论基础2.1 函数理论2.2 抽样理论 3. 技术手段3.1 增量式开发3.2 基于函数的规范与设计3.3 正确性验证3.4 统计测试 (Statistically Based Testing) 和软件认证 4. 应用与缺点1)太理论化2)缺少传统模块测试3)带有传统软件…

仅用于个人记录:地热文章阅读

22年Q1 The Geothermal Artificial Intelligence for geothermal exploration 目的:像素级探测地热。 步骤: 一、选AOI,包括Brady和Desrt Peak 二、 地热指标分析 1)温度 temperature 2018年至2019年期间25张LANDSAT 8的二级…

图搜索基础-深度优先搜索

图搜索基础-深度优先搜索 参考原理引入流程解析手推例子 代码实现运行结果结果分析 参考 理论参考:深蓝学院 实现参考:github项目 原理 引入 对于这样一个图,我们试图找到S到G的通路: 计算机程序不会像人眼一样,一…

通过代码加载mybatis的mapper xml

通过代码加载mybatis的mapper xml jpa 性能确实差&#xff0c;转战 mybatis 了 依赖 <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId>&l…

ruoyi框架学习

RBAC模型 数据字典 拦截器 token没有&#xff0c;submit&#xff0c;request.js中&#xff0c;前端前置拦截器&#xff0c;响应拦截器 后台 注解

[极客大挑战 2019]LoveSQL1 题目分析与详解

一、题目简介&#xff1a; 二、通关思路&#xff1a; 1、首先查看页面源代码&#xff1a; 我们发现可以使用工具sqlmap来拿到flag&#xff0c;我们先尝试手动注入。 2、 打开靶机&#xff0c;映入眼帘的是登录界面&#xff0c;首先尝试万能密码能否破解。 username: 1 or 11…

5G网络介绍

目录 一、网络部署模式 二、4/5G基站网元对标 三、4/5G系统架构对比 四、5G核心单元 五、边缘计算 六、轻量化&#xff08;UPF下沉&#xff09; 方案一&#xff1a;UPF下沉 方案二&#xff1a;UPF下沉 方案三&#xff1a;5GC下沉基础模式 方案四&#xff1a;…

论文阅读-CheckFreq:频繁、精细的DNN检查点操作。

论文名称&#xff1a;CheckFreq: Frequent, Fine-Grained DNN Checkpointing. 摘要 训练深度神经网络(DNNs)是一项资源密集且耗时的任务。在训练过程中&#xff0c;模型在GPU上进行计算&#xff0c;重复地学习权重&#xff0c;持续多个epoch。学习到的权重存在GPU内存中&…

九思OA软件user_list_3g.jsp存在SQL注入漏洞

文章目录 前言声明一、漏洞描述二、影响版本三、漏洞复现四、修复建议 前言 九思软件为中国高端OA系统知名品牌&#xff0c;九思OA软件user_list_3g.jsp存在SQL注入漏洞。 声明 请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造…