C# 异常及其类型

异常是在程序执行期间发生的意外事件。例如,

int divideByZero = 7 / 0;

以上代码会引发一个异常,因为一个数字不能被 0 整除。

让我们详细学习 C# 异常。


C# 异常层次结构

two classes derived from the base class - Exception
C# 中的异常层次结构

上图显示了 C# 中的异常层次结构。C# 提供了一个名为 Exception 的基类,该基类随后派生出其他类。

Exception 类派生的两大主要异常类是:

  • SystemException - 也称为内置异常
  • ApplicationException - 也称为用户定义异常

让我们详细了解它们。


C# 内置异常

内置异常也称为 SystemException 异常。在 C# 中,所有内置异常类都派生自 SystemException 类。此类处理所有与系统相关的异常。

一些常见的系统异常包括:

1. StackOverflowException - 当执行堆栈超出堆栈大小时,将引发此异常。通常在程序中使用无限循环时发生。

2. ArithmeticException - 当算术、类型转换或转换中出现错误时,将引发此异常。它是异常类的基类,例如:

  • DivideByZeroException - 当整数除以 **0** 时,将引发此异常。例如,当我们尝试执行 **5** 除以 **0** 时。
  • NotFiniteNumberException - 当浮点值的正无穷大、负无穷大或 NaN(非数字)时,将引发此异常。
  • OverFlowException - 当操作产生的计算结果超出范围时,将引发此异常。例如,

3. ValidationException - 当输入值无效时,将引发此异常。例如,如果我们输入一个整数值到期望 DateTime 值的字段,将引发此异常。

4. ArgumentException - 当我们在方法中提供了一个无效参数时,将引发此异常。例如,当我们在方法调用期间传递的数据类型与指定的参数不匹配时,会发生此异常。


示例:C# SystemException

using System;
class Program
{
    // an array containing string values
    static string[] colors = { "Red", "Green", "Pink" };
    static void Main()
    {
// print the array element present at 3rd index position Console.WriteLine(colors[3]);
} }

输出

Unhandled exception. System.IndexOutOfRangeException: Index was outside the bounds of the array.

在上面的示例中,我们试图访问 colors 数组元素的索引 **3**。

由于索引 **3** 处没有元素,程序将引发系统异常 IndexOutOfRangeException


C# 用户定义异常

到目前为止,我们已经了解了 C# 中的内置异常。我们还可以创建用户定义的异常,也称为应用程序级别异常。

ApplicationException 类是我们可以从中派生应用程序级别异常的基类。

假设我们想在应用程序中创建一个不允许参与者年龄超过 **18** 岁的异常。我们将其命名为 InvalidAgeException

要创建 InvalidAgeException 异常,我们将其从 ApplicationException 类派生,如下所示:

// user-defined exception class derived from 
// the ApplicationException base class  
class InvalidAgeException : ApplicationException
{
    // constructor for the InvalidAgeException class
    InvalidAgeException()
    {
        Console.WriteLine("Exception occurred: Invalid Age");
    }
}

在这里,我们定义了一个名为 InvalidAgeException 的用户定义异常类,它派生自 ApplicationException 类。

我们可以在用户定义的 InvalidAgeException 类中编写自定义代码,并定义该异常类的性质。

现在,每当违反年龄限制时,我们都可以引发 InvalidAgeException 异常。


C# 错误与异常

错误表示条件,例如编译错误、语法错误、代码逻辑部分错误、库不兼容、无限递归等。

错误通常超出了程序员的控制范围,我们不应该尝试处理错误。

异常可以被程序捕获和处理。

现在我们已经了解了异常,我们将在下一个教程中学习 外部处理

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战