Jupyter AI

22 C# 小白教程:异常处理之异常的种类

📅 发表日期: 2024年8月13日

分类: 🔷C# 入门

👁️阅读: --

在上一篇文章中,我们讨论了面向对象编程中的构造函数与析构函数。今天我们将深入了解异常处理的基础知识,特别是各种异常的种类。异常处理是开发中不可或缺的重要组成部分,它使我们能够在错误发生时优雅地处理程序的行为,而不至于让整个程序崩溃。

什么是异常?

在 C# 中,异常 是一种发生在程序执行过程中的错误情况。它可以是因为代码中的逻辑错误、资源不可用,或者外部系统(如网络、文件等)的故障等引起的。当异常发生时,程序的控制流将暂停,转而使用异常处理机制来处理这个错误。

异常的种类

1. 系统异常(System.Exception)

在 C# 中,所有异常的基类是 System.Exception。自定义的异常通常会继承自这个类。它提供了处理异常的一般结构。

2. 常见的系统异常

C# 提供了多个常见异常类,常见的包括:

  • ArgumentNullException:当一个方法接收到 null 参数,但不允许使用 null

    public void ProcessData(string data)
    {
        if (data == null)
        {
            throw new ArgumentNullException(nameof(data), "数据不能为空");
        }
        // 处理数据...
    }
    
  • ArgumentOutOfRangeException:表示索引超出了范围。

    public void AccessArrayElement(int[] array, int index)
    {
        if (index < 0 || index >= array.Length)
        {
            throw new ArgumentOutOfRangeException(nameof(index), "索引超出范围");
        }
    
        int value = array[index];
        // 处理值...
    }
    
  • InvalidOperationException:当方法调用的对象状态不正确时抛出这种异常。

    public void StartProcess(bool isRunning)
    {
        if (isRunning)
        {
            throw new InvalidOperationException("进程已经在运行中");
        }
        // 启动过程...
    }
    
  • DivideByZeroException:当尝试将一个数除以零时抛出。

    public double Divide(int a, int b)
    {
        if (b == 0)
        {
            throw new DivideByZeroException("不能除以零");
        }
        return a / b;
    }
    

3. 自定义异常

除了使用系统提供的异常类外,我们可以根据需求自定义异常。自定义异常通常用于表示特定的业务逻辑错误。

public class CustomException : Exception
{
    public CustomException(string message) : base(message)
    {
    }
}

在实际使用中,可以这样抛出自定义异常:

public void ValidateUser(string username)
{
    if (string.IsNullOrEmpty(username))
    {
        throw new CustomException("用户名不能为空");
    }
    // 处理用户...
}

4. 捕获异常示例

在了解了异常的种类后,我们将讨论如何捕获和处理这些异常。在下一篇文章中,我们将详细介绍如何使用 try-catch 语句来捕获并处理这些异常。

结语

异常处理是确保 C# 程序健壮性和可靠性的重要手段。理解不同种类的异常以及在什么时候可能会抛出这些异常,可以帮助我们在编写代码时避免潜在的错误。在下一篇文章中,我们将深入探讨异常的捕获和处理机制,帮助你更好地管理程序异常。