C#异常和调试
.NET Framework 类库中的所有异常都派生于 Exception 类,异常包括系统异常和应用异常。
默认所有系统异常派生于 System.SystemException,所有的应用程序异常派生于 System.ApplicationException。
系统异常包括 OutOfMemoryException、IOException、NullReferenceException。
常用的异常类如下图所示。
常用的系统异常类如下表所示。
异常类 | 说明 |
---|---|
System.OutOfMemoryException | 用 new 分配内存失败 |
System.StackOverflowException | 递归过多、过深 |
System.NullReferenceException | 对象为空 |
Syetem.IndexOutOfRangeException | 数组越界 |
System.ArithmaticException | 算术操作异常的基类 |
System.DivideByZeroException | 除零错误 |
在 C# 语言中异常与异常处理语句包括三种形式,即 try catch、try finally、try catch finally。
在上述三种异常处理的形式中所用到关键字其含义如下:
- try:用于检查发生的异常,并帮助发送任何可能的异常。
- catch:以控制权更大的方式处理错误,可以有多个 catch 子句。
- finally:无论是否引发了异常,finally 的代码块都将被执行。
自定义异常
using System;
namespace Demo_Exception
{
class MyException : Exception
{
public MyException(string message) : base(message)
{
}
}
class Program
{
//若在文本框中输入的年龄不在 18〜45 岁即会抛出自定的异常
//自定义异常也继承自 Exception 类,因此如果不直接处理 MyException 异常,也可以直接使用 Exception 类来处理该异常。
static void Main(string[] args)
{
try
{
var str = Console.ReadLine();
int age = int.Parse(str.Trim());
if(age < 18 || age > 45)
{
throw new MyException("年龄必须在18~45之间");
}
else
{
Console.WriteLine("输入的年龄正确!");
}
}
catch (MyException ex)
{
Console.WriteLine(ex.Message);
}catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}
输出调试信息
在 C# 语言中允许在程序运行时输出程序的调试信息,类似于使用 Console.WriteLine 的方式向控制台输出信息。
所谓调试信息是程序员在程序运行时需要获取的程序运行的过程,以便程序员更好地解决程序中出现的问题,这种调试也被称为是非中断调试。
输出调试信息的类保存在 System.Diagnostics 命名空间中,通常用 Debug 类或 Trace 类实现调试时输出调试信息,具体的语句如下。
Debug.WriteLine();
Trace.WriteLine();
其中,Debug.WriteLine() 是在调试模式下使用的;Trace.WriteLine 除了可以在调试模式下使用,还可以用于发布的程序中。
Trace 类的 WriteLine 方法中的参数不支持上述代码中 Debug 类的 WriteLine 方法的参数形式,只能传递字符串。
需要注意的是当程序在 Debug 状态下执行时使用 Debug 类打印的信息才会在输出窗口中显示,在 Release 状态下执行时只有 Trace 类输出的内容才会显示在输出窗口中。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律