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

二、C#基础语法( 异常处理)

在C#中,异常处理是一种处理程序运行时可能出现的错误或异常情况的重要机制。通过异常处理,我们可以捕获并处理程序中的错误,从而避免程序崩溃或产生不可预测的行为。

C#中的异常处理主要通过try-catch语句块来实现。以下是C#中异常处理的基础语法:

try
{// 代码块,可能会抛出异常
}
catch (ExceptionType1 ex)
{// 处理ExceptionType1异常的代码块
}
catch (ExceptionType2 ex)
{// 处理ExceptionType2异常的代码块
}
finally
{// 无论是否发生异常,最后都会执行的代码块
}
  • try块包含可能会抛出异常的代码。
  • catch块用于捕获并处理异常。你可以有多个catch块来处理不同类型的异常。ExceptionType表示要捕获的异常类型,如System.DivideByZeroExceptionSystem.NullReferenceException等。excatch块中定义的变量,它存储了被捕获的异常对象。
  • finally块包含的代码无论是否发生异常都会执行。通常用于释放资源或进行清理工作。

下面是一个简单的例子:

try
{int a = 0;int b = 1;int result = b / a; // 这将抛出一个DivideByZeroException异常
}
catch (DivideByZeroException ex)
{Console.WriteLine("发生除以零的异常: " + ex.Message);
}
catch (NullReferenceException ex) // 这个catch块永远不会执行,因为前面的catch已经捕获了异常
{Console.WriteLine("发生空引用异常: " + ex.Message);
}
finally
{Console.WriteLine("finally块被执行"); // 这个输出总是会被看到,无论是否发生异常
}

在上面的例子中,由于变量a的值为0,导致除数为零,因此会抛出DivideByZeroException异常。这个异常被第一个catch块捕获并处理。第二个catch块捕获的是NullReferenceException异常,但由于没有发生这种类型的异常,所以这个catch块永远不会被执行。不论是否发生异常,最后的finally块都会被执行。

C#中还有其他的异常处理相关的特性,例如throw语句和using语句。

  1. throw语句用于在异常处理过程中重新抛出当前处理的异常。它可以在catch块中用于重新抛出已经被捕获的异常,以使异常可以向上级调用者传递。
try
{// ... 可能抛出异常的代码 ...
}
catch (Exception ex)
{// 处理异常的代码 ...throw; // 重新抛出异常
}
  1. using语句用于确保资源(如文件、数据库连接、网络连接等)在使用后被正确关闭和释放。无论是否发生异常,using块中的代码都会执行。这对于避免资源泄漏非常有用。
using (StreamWriter writer = new StreamWriter("file.txt"))
{writer.WriteLine("Hello, World!"); // 可能会抛出异常
} // 在这里,writer 会被正确关闭,即使发生了异常

使用这些特性,你可以构建健壮的程序,能够优雅地处理错误和异常情况,同时确保资源得到妥善管理。

相关文章:

  • 使用JAVA Zookeeper构建分布式键值存储
  • STM32移植LVGL图形库
  • ❀My排序算法学习之选择排序❀
  • 【Linux】线程池设计/单例模式/STL、智能指针与线程安全/读者写者问题
  • PostgreSQL10数据库源码安装及plpython2u、uuid-ossp插件安装
  • 1、TCP 和 UDP 区别? 2、TCP/IP 协议涉及哪几层架构? 3、描述下 TCP 连接 4 次挥手的过程?为什么要 4 次挥手?
  • Guava的Joiner的日常使用
  • 多维时序 | MATLAB实现SSA-BiLSTM麻雀算法优化双向长短期记忆神经网络多变量时间序列预测
  • 隧道代理HTTP工作原理:一场奇妙的网络魔法表演
  • Hadoop(2):常见的MapReduce[在Ubuntu中运行!]
  • python高级代码
  • SparkStreaming_window_sparksql_reids
  • 驶入未来:网约车运营数据揭秘与可视化大屏展示
  • 【JavaEE进阶】 初识Spring Web MVC
  • VSCode 加Cortex-Debug嵌入式调试方法
  • hexo+github搭建个人博客
  • #Java异常处理
  • CAP 一致性协议及应用解析
  • input的行数自动增减
  • Javascripit类型转换比较那点事儿,双等号(==)
  • JavaScript-Array类型
  • js写一个简单的选项卡
  • k8s 面向应用开发者的基础命令
  • Laravel5.4 Queues队列学习
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • python docx文档转html页面
  • Python中eval与exec的使用及区别
  • SQL 难点解决:记录的引用
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 大整数乘法-表格法
  • 高性能JavaScript阅读简记(三)
  • 携程小程序初体验
  • 用简单代码看卷积组块发展
  • ​水经微图Web1.5.0版即将上线
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (二)学习JVM —— 垃圾回收机制
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (转)Linq学习笔记
  • .net 7 上传文件踩坑
  • .net 8 发布了,试下微软最近强推的MAUI
  • .NET Core跨平台微服务学习资源
  • .Net 路由处理厉害了
  • .net 微服务 服务保护 自动重试 Polly
  • .Net(C#)常用转换byte转uint32、byte转float等
  • .net6Api后台+uniapp导出Excel
  • .net网站发布-允许更新此预编译站点
  • @property括号内属性讲解
  • [ 云计算 | AWS ] 对比分析:Amazon SNS 与 SQS 消息服务的异同与选择
  • [CareerCup] 6.1 Find Heavy Bottle 寻找重瓶子
  • [C语言]——内存函数
  • [JavaScript]_[初级]_[不使用JQuery原生Ajax提交表单文件并监听进度]