C# 异常处理

2025 年 8 月 28 日 | 阅读 8 分钟

C# 编程中的异常处理是一种处理运行时错误的技术。我们进行异常处理是为了在发生运行时错误后,应用程序的正常流程仍然能够得到维持。它使我们能够通过使用 try、catch、throw 和 finally 块,在不终止程序的情况下识别和处理代码中的错误。

理解异常

C# 中的异常是在程序执行期间抛出并中断其正常流程的意外事件或对象。它是一个可以处理的运行时错误。它可能由于多种情况而发生,例如无效输入、零除法、文件未找到和网络丢失。如果我们不处理异常,它将打印异常消息并终止程序。

异常处理关键字

C# 中,主要有四个关键字用于异常处理。它们如下:

C# Exception Handling

在这里,我们将一一讨论这些关键字。

1) Try 块

C# 编程语言中,try 块用于编写可能导致异常的代码。如果发生错误,它会跳转到 catch 块来处理错误,从而防止程序崩溃。

语法

它具有以下语法。

2) Catch 块

在 C# 中,catch 块用于处理代码中的异常。它仅在 try 块中抛出错误时执行,这使我们能够有效地管理错误,而不是意外终止。也可以使用多个 catch 块来处理不同类型的异常。

语法

它具有以下语法。

了解更多: C# try/Catch

3) Throw 块

在 C# 中,throw 关键字用于在程序中发生错误时创建和抛出异常。它告诉程序停止正常运行,并移至最近的 catch 块来处理错误。

语法

它具有以下语法。

4) Finally 块

在 C# 中,finally 块是一个代码块,无论条件是否为真,它总是在 try 和 catch 块之后运行。它用于清理各种操作,例如关闭文件、释放资源或处置对象。

语法

它具有以下语法。

了解更多: C# Finally

C# 简单异常处理示例

让我们以一个简单的例子来演示 C# 中的异常处理。

示例

编译并运行

输出

Enter a Positive Number: 15
Square of 15 is: 225
Program execution finished successfully.
Finally block always executes.

说明

在此示例中,我们演示了使用 try、catch、throw 和 finally 进行异常处理。首先,我们使用 try 块提示输入一个正数;如果输入为负数,则会抛出自定义异常。之后,我们使用 catch 块处理 FormatException 和通用异常。最后,我们使用 finally 块,它总是执行,以确保无论是否有错误,最终的消息或清理操作都能运行。

C# 中的自定义异常

在 C# 编程语言中,自定义异常是一个用户定义的异常,它扩展了内置的 Exception 类。当预定义的异常未能有效定义错误条件时,可以使用它。自定义异常可以继承自 Exception 类。如果程序需要,它还可以定义自定义错误消息和各种属性。

语法

它具有以下语法:

C# 自定义异常示例

让我们以一个例子来说明 C# 中的自定义异常。

示例

编译并运行

输出

情况 1

如果我们输入的年龄小于 18 岁,输出将是

Please input your age: 
12
Exception: Minimum voting age is 18 years. 
Program execution successfully.

情况 2

如果我们输入的年龄大于或等于 18 岁,输出将是

Please input your age: 
18
You are eligible to vote.
Program execution successfully.

说明

在此示例中,我们演示了自定义异常在年龄验证中的使用。首先,我们定义一个 AgeResException 类,并检查输入的年龄是否小于 18 岁;如果年龄小于,则抛出自定义异常。之后,我们使用 try-catch 块来处理自定义异常和通用异常,而 finally 块确保始终显示完成消息。

C# Exception 类

在 C# 中,异常定义在 System.Exception 类下,它是处理运行时错误的父类。C# 中有几种常见的异常类。其中一些如下。

Exception描述
System.Exception它用于表示 C# 中所有异常的父类。
System.SystemException它表示程序运行时自动发生的所有错误。
DivideByZeroException当发生零除法时,它会抛出运行时错误。
IndexOutOfRangeException当数组或集合索引超出范围时,它会抛出错误。
NullReferenceException当尝试使用 null 对象引用时,它会抛出错误。
InvalidCastException当执行无效的类型转换时,它会抛出错误。
OutOfMemoryException当系统没有足够的空间继续运行程序时,它会抛出错误。
System.ApplicationException它是程序员创建的所有错误的 मुख्य 类。

在 C# 中使用多个 Catch 块进行异常处理的示例

让我们以一个简单的例子来说明在 C# 中使用多个 catch 块进行异常处理。

示例

编译并运行

输出

情况 1

如果我们从数组索引 0 到 3 之间选择有效值,输出将是

Please enter a number: 10
Enter an array indexing position: 2
Value at position 2 is: 6

情况 2

如果我们从数组索引中选择无效值(大于 3),输出将是

Please enter a number: 5
Enter an array indexing position: 4
Choose a valid position from the array.

情况 3

如果我们从数组索引中选择无效值(例如字母值),输出将是

Please enter a number: abc
Please input number only.

说明

在此示例中,我们演示了使用 try-catch 进行多重异常处理。首先,它提示我们输入一个数字,然后要求输入一个数组索引来显示该位置的值。如果我们输入非数字值,则会处理 FormatException;如果给出了无效的数组索引,则会捕获 IndexOutOfRangeException。

C# 中异常处理的目的

C# 编程语言的异常处理有多种目的。其中一些如下。

  • 它用于检测和处理运行时错误,而不会导致程序崩溃。
  • 它用于在发生预期错误时维护程序的流程。
  • 它提供了一种捕获和记录代码中错误的方法,以便在不终止应用程序的情况下对其进行识别、管理和修复。

C# 中错误和异常之间的区别

C# 中的错误和异常之间有几个区别。其中一些如下。

特点错误Exception
定义错误是由程序员编写的错误代码引起的。异常是在程序执行期间发生的事件或对象。
发生时间这通常是编译时问题。这是一个运行时问题。
示例语法错误、缺少分号和未声明的变量是错误的示例。异常的例子包括 DivideByZeroException、NullReferenceException 和 IndexOutOfRangeException。
处理方式必须处理它才能修复其问题。必须使用 try、catch 和 finally 块来处理它才能修复其问题。
代码指示错误指示代码无效或代码中有错误。异常指示执行期间的非异常情况的有效问题。

结论

总之,C# 异常处理是代码执行的一个重要方面。它有助于处理运行时错误并维护程序的正常流程。try、catch、throw 和 finally 块有助于使代码更加可靠,从而防止程序崩溃。

C# 异常处理常见问题解答

1) C# 中的异常是什么?

在 C# 编程语言中,异常是在程序运行时出现的意外事件或对象,它会中断程序的正常流程。它通常发生在无效输入、零除法、文件未找到或网络丢失等情况。

2) 为什么我们在 C# 中使用异常处理?

异常处理主要用于检测和处理运行时错误,而不会导致程序崩溃。

3) C# 中异常处理使用的关键字是什么?

在 C# 中,主要有四个关键字用于异常处理。

  • Try:用于编写可能导致异常的代码。
  • Catch:用于处理代码中的异常。此块仅在 try 块中出现问题时运行。
  • Throw:用于在代码中出现问题时创建和抛出异常。
  • Finally:这是一个代码块,无论条件是否为真,它总会运行。它通常用于清理资源,例如关闭文件、释放数据库连接或非托管资源。

4) C# 中为什么需要自定义异常?

在 C# 中,自定义异常是一个用户定义的类,它继承自 Exception 类。它用于处理应用程序特定的错误。

5) 一个 try 块之后可以有多个 catch 块吗?

是的,我们可以在单个 try 块中使用多个 catch 块来处理 C# 编程语言中不同类型的异常。

例如


下一个主题C# try/catch