跳到主要内容

C# 异常类型

介绍

在 C# 编程中,异常处理是确保程序在遇到错误时能够优雅地恢复或退出的重要机制。异常是程序运行时发生的错误或意外情况,例如除以零、访问空对象或文件不存在等。C# 提供了多种内置的异常类型,每种类型都用于处理特定的错误场景。

本文将详细介绍 C# 中常见的异常类型,并通过代码示例和实际案例帮助你理解它们的用法。

常见的 C# 异常类型

C# 中的异常类型都继承自 System.Exception 类。以下是一些常见的异常类型及其用途:

1. System.Exception

这是所有异常的基类。它包含两个重要的属性:

  • Message:描述异常原因的字符串。
  • StackTrace:提供异常发生时的调用堆栈信息。

2. System.NullReferenceException

当尝试访问空对象的成员时抛出。例如:

string text = null;
int length = text.Length; // 抛出 NullReferenceException

3. System.IndexOutOfRangeException

当尝试访问数组或集合中不存在的索引时抛出。例如:

int[] numbers = { 1, 2, 3 };
int value = numbers[3]; // 抛出 IndexOutOfRangeException

4. System.DivideByZeroException

当尝试除以零时抛出。例如:

int result = 10 / 0; // 抛出 DivideByZeroException

5. System.ArgumentException

当传递给方法的参数无效时抛出。例如:

void SetAge(int age)
{
if (age < 0)
throw new ArgumentException("年龄不能为负数");
}

SetAge(-1); // 抛出 ArgumentException

6. System.FormatException

当字符串的格式不符合预期时抛出。例如:

int number = int.Parse("abc"); // 抛出 FormatException

7. System.IO.IOException

当发生输入/输出错误时抛出,例如文件未找到或无法访问。例如:

using System.IO;

string content = File.ReadAllText("nonexistent.txt"); // 抛出 IOException

实际案例

假设你正在开发一个简单的文件读取程序,以下是可能遇到的异常及其处理方式:

using System;
using System.IO;

class Program
{
static void Main()
{
try
{
string path = "data.txt";
string content = File.ReadAllText(path);
Console.WriteLine(content);
}
catch (FileNotFoundException ex)
{
Console.WriteLine($"文件未找到: {ex.Message}");
}
catch (IOException ex)
{
Console.WriteLine($"IO 错误: {ex.Message}");
}
catch (Exception ex)
{
Console.WriteLine($"发生未知错误: {ex.Message}");
}
}
}

输入和输出示例

  • 如果 data.txt 文件存在且内容为 Hello, World!,程序将输出:

    Hello, World!
  • 如果 data.txt 文件不存在,程序将捕获 FileNotFoundException 并输出:

    文件未找到: Could not find file 'data.txt'.

总结

C# 提供了丰富的异常类型来处理不同的错误场景。通过理解这些异常类型及其用途,你可以编写更健壮的程序,并在出现问题时快速定位和修复错误。

提示

在实际开发中,建议始终捕获特定的异常类型,而不是直接捕获 Exception,这样可以更精确地处理错误。

附加资源

  • C# 异常处理官方文档
  • 练习:尝试编写一个程序,模拟用户输入年龄并处理可能的 FormatExceptionArgumentException