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

c#基础07(调试与异常捕捉)

文章目录

    • 调试与异常捕捉
      • 调试
      • 异常处理
        • C#中的异常类
        • 异常处理
        • 抛出对象

调试与异常捕捉

很多时间,写代码不能一撸到底,中间都是经历过无数次的调试,才能正常正确的运行起来。.Net调试有很多方法和技巧。

调试

在C#中程序调试主要指在Visual Studio2022中调试程序,包括设置断点、监视断电,以及逐语句、逐过程、使用一些辅助窗口来调试程序。
在这里插入图片描述
在这里插入图片描述
鼠标左键点击最左边的灰色区域,会出现一个小红点,则表示设置断点成功!
点击在这里插入图片描述,程序则会在你打断点的地方挂起。
如果你想让程序继续往下执行,则需要点击逐过程小图标,或者按F10。
在这里插入图片描述
如果你觉得没必要再调试下去了,则可以点击 “继续” 按钮,则程序会取消挂起遇到直到下一个断点。

取消断点

对着左边的小红点再点一次,则表示取消断点。

异常处理

异常是在程序执行期间出现的问题。C# 中的异常是对程序运行时出现的特殊情况的一种响应,比如尝试除以零。

异常提供了一种把程序控制权从某个部分转移到另一个部分的方式。C# 异常处理时建立在四个关键词之上的:trycatchfinallythrow

  • try:一个try块表示了一个将被激活的特定的异常的代码块。后跟一个或多个catch块。
  • catch:程序通过异常处理程序捕获异常
  • finally:finally块用于执行给定的语句,不管异常是否被抛出都会执行。
  • throw:当问题出现时,程序抛出一个异常。

语法

try
{//可能出现异常的语句
}
catch(exceptionname e1)
{//错误处理代码
}
catch(exceptionname e2)
{//错误处理代码
}
catch(exceptionname e3)
{//错误处理代码
}
catch(exceptionname eN)
{//错误处理代码
}
finally
{//要执行的语句
}
C#中的异常类

C# 异常是使用类来表示的。C# 中的异常类主要是直接或间接地派生于 System.Exception 类。System.ApplicationExceptionSystem.SystemException 类是派生于 System.Exception类的异常类。

System.ApplicationException 类支持由应用程序生成的异常。所以程序员定义的异常都应派生自该类。

下表列出了一些派生自 System.SystemException 类的预定义的异常类:

异常类描述
System.IO.IOException处理 I/O 错误。
System.IndexOutOfRangeException处理当方法指向超出范围的数组索引时生成的错误。
System.ArrayTypeMismatchException处理当数组类型不匹配时生成的错误。
System.NullReferenceException处理当依从一个空对象时生成的错误。
System.DivideByZeroException处理当除以零时生成的错误。
System.InvalidCastException处理在类型转换期间生成的错误。
System.StackOverflowException处理栈溢出生成的错误。
异常处理

C# 以 try 和 catch 块的形式提供了一种结构化的异常处理方案。使用这些块,把核心程序语句与错误处理语句分离开。

示例:

int result = 0;
public static void divsion(int num1,int num2)
{try{result = num1 / num2;}catch(DivideByZeroException e){Console.WriteLine("Exception caught:{0}",e);}finally{Console.WriteLine("Result:{0}",result);}
}
static void Main(string[] args)
{division(25,0);Console.ReadKey();
}
抛出对象

如果异常是直接或间接派生自 System.Exception 类,您可以抛出一个对象。您可以在 catch 块中使用throw 语句来抛出当前的对象,如下所示:

Catch(Exception e)
{...Throw e
}
http://www.xdnf.cn/news/652807.html

相关文章:

  • [Git] 如何将已经执行的修改操作撤销
  • 力扣热题100之LRU缓存机制
  • 力扣 394.字符串解码
  • mysql-tpcc-mysql压测工具使用
  • 【Java工程师面试全攻略】Day2:Java集合框架面试全解析
  • 榕壹云物品回收系统实战案例:基于ThinkPHP+MySQL+UniApp的二手物品回收小程序开发与优化
  • 【运维】OpenWrt DNS重绑定保护配置指南:解决内网域名解析问题
  • 项目亮点 封装request请求模块
  • 2025年- H51-Lc159 --199. 二叉树的右视图(层序遍历,队列)--Java版
  • AI学习笔记二十八:使用ESP32 CAM和YOLOV5实现目标检测
  • 使用docker容器部署Elasticsearch和Kibana
  • Rk3568 Andorid 11 ,根据prop属性的值控制是否禁止u盘连接
  • 倚光科技在二元衍射面加工技术上的革新:引领光学元件制造新方向​
  • 拓扑光子混沌算法
  • 开源第三方库发展现状
  • 《软件工程》第 9 章 - 软件详细设计
  • Ini配置文件读写,增加备注功能
  • VR 技术在农业领域或许是一抹新曙光​
  • Java Class 文件编码机制全解析
  • 分布式锁与锁续期
  • 轻量级视觉语言模型 Dolphin:高效精准的文档结构化解析利器
  • 电机控制学习笔记
  • 深入解析Spring Boot与Spring Security整合实现JWT认证
  • ADS学习笔记(四) S参数仿真
  • 网络编程1
  • SAP ERP 系统拆分的七大挑战
  • WIN--文件读写
  • Linux的top命令使用
  • 在前端项目中实现打包后可配置地址(如 API 域名、静态资源路径等)
  • 告别复杂操作!链抽象如何让 Web3 用户体验媲美 Web2?