C# 中如何使用多个 catch 子句

2024 年 8 月 29 日 | 5 分钟阅读

在本文中,我们将通过一些示例讨论如何在 C# 程序中使用多个 catch 块。但在讨论多个 catch 块的实现之前,我们必须了解 catch 块。

什么是 Catch 块?

每个 catch 块 都充当异常处理程序,处理其参数指定的特定类型的异常。可以通过传递 类型参数 为异常处理程序分配特定类型的异常。它必须是继承自 Throwable 类的类的名称。处理程序可以通过名称引用异常。catch 块是在调用异常处理程序时执行的一段代码。如果处理程序是调用堆栈中其 ExceptionType 与抛出的异常类型匹配的第一个异常处理程序,则运行时系统会调用该异常处理程序。在这种情况下,如果 thrower 对象可以合法地与异常处理程序参数关联,则系统认为该对象是匹配的。

在 C# 中,我们可以使用 Try 块来使用多个 Catch 块。多个 catch 块通常用于处理多种类型的异常。对同一异常类型使用多个 catch 块将导致编译时错误,因为 C# 不允许对同一异常类型使用多个 catch 块。try 块后面总是跟着一个 catch 块。通常,catch 块按其在程序中出现的顺序进行检查。如果指定的异常类型与第一个 catch 块匹配,则执行第一个 catch 块,然后忽略其余的 catch 块。当第一个 catch 块与异常类型不匹配时,编译器会寻找下一个 catch 块。

语法

它具有以下语法:

示例

以下是一些更好地理解 C# 中 catch 块实现的示例。

示例 1: 以下示例尝试生成两种不同类型的异常:DivideByZeroExceptionIndexOutOfRangeException。我们将使用与一个 Try 块关联的两个 Catch 块来处理这些异常。

catch 块会处理不同类型的异常。catch 块 1 用于捕获 DivideByZeroException,catch 块 2 用于处理 IndexOutOfRangeException。

文件名:Catch.cs

输出

The Number: 18
The Divisor value: 9
The Quotient is: 2
The Number: 19
The Divisor value: 0
Division by zero is impossible.
The Number: 28
The Divisor value: 1
The Quotient is: 28
The Number: 35
The Divisor value: 0
Division by zero is impossible.
The Number: 56
The Index value is Out of Range

说明

数组初始化: 在此示例中,两个数组(numbers 和 divisors)都使用整数值进行初始化。

For 循环: 程序使用 for 循环 遍历数组的元素,一个 try 块,以及 numbers[j] / divisors(J)(此指令取自循环内部)。

Catch 块: Try 块后面跟着两个 catch 块。Catch 块有一组不同的异常,这些异常可以在执行 Try 块中的代码时发现。

catch 块 1 捕获 DivideByZeroException 并打印一条消息,指示不能除以零。

其后是第二个 catch 块,它打印一个错误 'IndexOutOfRangeException',表示索引值超出范围。

循环继续: 之后,即使发现异常,程序也可以继续下一个循环,从而能够处理数组中的每个元素。

示例 2

以下示例描述了 try 块异常。因此,我们使用三种不同类型的 catch 块来处理 try 块抛出的异常。catch 块 1 处理 IndexOutOfRangeException,catch 块 2 处理 FormatException,catch 块 3 处理 OverflowException

文件名:MutliCatchBlock.cs

输出

The value entered is not a number!

说明

  • 在此示例中,Try 块尝试使用 val = byte 将字符串 "a" 转换为 (byte.Parse("a");)。由于缺少 "a" 字节的相应数据表示,此行代码会遇到 FormatException
  • Catch 块: Catch 块跟在 Try 块之后,用于处理 Try 块可能抛出的特定类型的异常。
  • Catch 块 1 (IndexOutOfRangeException): 它通过打印 "important argument value" 来处理 IndexOutOfRangeException
  • 块 2 的异常 (FormatException): 输入的值不是数值。
  • Catch 块 3 (OverflowException): 它通过输出 "Data is out of range" 来处理 OverflowException。
  • 如果 try 块包含异常,程序将跳转到其 catch 块,具体由抛出的异常类型决定。在这种情况下,异常类型为 FormatException,因此控制权传递给 catch 块 2,该块显示 "The value entered is not a number"。

结论

总之,多重 catch 块处理不同类型的异常。每个 catch 块处理多种类型的异常,允许我们创建多个 catch 块。