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

C#异常处理-throw语句

throw语句是我们手动引发异常的一个语句。

在程序执行过程中,当某些条件不符合我们的要求时,那么我们就可以使用throw语句手动抛出异常,那么就可以在异常发生的地方终止当前代码块的执行,此时我们就可以把控制权传递给调用堆栈中的异常处理程序,如try-cath语句块。

通常我们可以抛出以下一些异常:

1、特定类的异常:

throw可以抛出派生自System.Exception类的异常,如:

throw new ArgumentException("错误值");

这里就是抛出了个ArgumentException异常。

2、自定义异常,自然可以抛出System.Exception类的异常,那么我们可以通过继承该类,进行自定义的异常类定义。这样能然我们更灵活地处理异常。如自定义如下异常类:

public class CustomException : Exception
{public CustomException(string message) : base(message){// 可以在构造函数中进行额外的初始化操作}
}

使用:

throw new CustomException("出现异常了");

3、重新抛出异常:我们可以使用throw语句重新抛出异常,然后就可以把异常传递给上层的异常处理程序。这在我们程序具有多层的处理逻辑,每层都有不同的处理方法时是非常有用的。

class Program
{static void Main(){try{DoSomething();}catch (Exception ex){Console.WriteLine("在Main中引发错误: " + ex.Message);}Console.ReadLine();}static void DoSomething(){try{// 模拟一个可能引发异常的操作SimExc();}catch (Exception ex){Console.WriteLine("在DoSomething方法中引发错误: " + ex.Message);throw; // 重新抛出当前异常}}static void SimExc(){int result = 10 / 0; // 这里会引发一个除以零的异常}
}

这里就通过throw语句重新抛出异常,并把异常重新传回给main里面的异常处理块。

4、在C#7.0之后,引入了throw表达式,它允许我们在条件表达式中抛出异常。官方的解析说这对提高代码可读性有利。如:

int value = GetValue();
string result = value != 0 ? "Valid" : throw new ArgumentException("错误值");、//表达式true则赋值给Valid,否则抛出异常。

相关文章:

  • 软著项目推荐 深度学习 python opencv 火焰检测识别 火灾检测
  • C++值常用集合算法
  • 简易键值对文本解析
  • LINUX入门篇【10】---进程篇【2】---进程状态
  • TCP/IP协议、三次握手、四次挥手
  • <JavaEE> 什么是线程(Thread)?进程和线程有什么区别?
  • 性能优化中使用Profiler进行内存泄露的排查及解决方式
  • Linux 中的 ls 命令使用教程
  • anacoda 在 git 远程仓库的时候遇到 SSL 无法访问和字节缓冲太小和换源以及无法连接到官网和字节写入冲突
  • Linux——使用命令查看文件和文件夹数量
  • react项目自行配置热更新
  • 1-1、汇编语言概述
  • 【Python】巧用tkinter设计秒表计时器
  • linux下的工具---vim
  • 电力感知边缘计算技术网关产品设计方案-硬件方案
  • 10个确保微服务与容器安全的最佳实践
  • angular学习第一篇-----环境搭建
  • javascript从右向左截取指定位数字符的3种方法
  • NSTimer学习笔记
  • Object.assign方法不能实现深复制
  • Vue UI框架库开发介绍
  • Vue学习第二天
  • WebSocket使用
  • 百度地图API标注+时间轴组件
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 看域名解析域名安全对SEO的影响
  • 聊聊hikari连接池的leakDetectionThreshold
  • 实习面试笔记
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 物联网链路协议
  • 写代码的正确姿势
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 怎么将电脑中的声音录制成WAV格式
  • 带你开发类似Pokemon Go的AR游戏
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (附源码)ssm码农论坛 毕业设计 231126
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (转) ns2/nam与nam实现相关的文件
  • (转)四层和七层负载均衡的区别
  • .form文件_SSM框架文件上传篇
  • .libPaths()设置包加载目录
  • .NET Reactor简单使用教程
  • .Net 应用中使用dot trace进行性能诊断
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .NET4.0并行计算技术基础(1)
  • .net图片验证码生成、点击刷新及验证输入是否正确
  • [100天算法】-不同路径 III(day 73)
  • [2016.7 day.5] T2
  • [20171102]视图v$session中process字段含义
  • [Android实例] 保持屏幕长亮的两种方法 [转]
  • [Big Data - Kafka] kafka学习笔记:知识点整理