logo

第 6 章:异常处理

作者
Modified on
Reading time
3 分钟阅读:..评论:..

异常处理是编程中至关重要的一部分,它帮助我们在程序运行过程中应对未预料到的错误。本章将深入探讨 C#中的异常处理机制,包括异常的类型、try-catch-finally 语句的使用、如何抛出异常以及如何定义自定义异常。

什么是异常

在程序运行过程中,可能会遇到各种各样的错误,例如除数为零、数组越界、文件未找到等。这些错误在 C#中被称为"异常"。异常是程序执行过程中出现的问题或意外情况,通常由系统自动检测并生成相应的异常对象。

异常的类型

C#中有多种类型的异常,以下是几种常见的异常类型:

  1. System.Exception: 所有异常的基类。
  2. System.SystemException: 由系统引发的异常。
  3. System.ApplicationException: 由应用程序引发的异常。
  4. 常见的派生异常:
    • System.NullReferenceException: 尝试访问未实例化的对象。
    • System.IndexOutOfRangeException: 数组下标超出范围。
    • System.DivideByZeroException: 除数为零。

try-catch-finally

C#使用try-catch-finally语句来处理异常。try块包含可能引发异常的代码,catch块用于捕获异常并处理,而finally块包含无论是否发生异常都要执行的代码。以下是其基本结构:

try { // 可能引发异常的代码 } catch (Exception ex) { // 处理异常的代码 } finally { // 始终执行的代码 }

示例

try { int[] numbers = { 1, 2, 3 }; Console.WriteLine(numbers[5]); } catch (IndexOutOfRangeException ex) { Console.WriteLine("数组下标超出范围:" + ex.Message); } finally { Console.WriteLine("无论是否发生异常,这段代码都会执行。"); }

在上述示例中,try块中的代码尝试访问数组的一个不存在的元素,从而引发IndexOutOfRangeException异常。catch块捕获并处理该异常,最后finally块确保某些代码始终执行。

抛出异常

有时,我们需要在代码中手动抛出异常,使用throw关键字可以实现这一点。

示例

public void CheckAge(int age) { if (age < 18) { throw new ArgumentException("年龄不能小于18岁"); } Console.WriteLine("年龄符合要求"); }

在该示例中,CheckAge方法检查传入的年龄是否小于 18 岁,如果是,则抛出ArgumentException异常。

自定义异常

在某些情况下,标准异常类型不能准确描述问题,这时可以定义自定义异常。

示例

public class InvalidAgeException : Exception { public InvalidAgeException(string message) : base(message) { } }
public void CheckAge(int age) { if (age < 18) { throw new InvalidAgeException("年龄不能小于18岁"); } Console.WriteLine("年龄符合要求"); }

在该示例中,定义了一个名为InvalidAgeException的自定义异常类,并在CheckAge方法中使用该异常。

通过本章的学习,您应该已经掌握了 C#中的异常处理机制,包括如何使用try-catch-finally语句、如何手动抛出异常以及如何定义自定义异常。异常处理对于编写健壮和稳定的代码至关重要,希望您能够深入理解并熟练应用。