掌握 C# 异常处理机制

在任何编程语言中,处理错误和异常都是不可避免的。C# 提供了强大的异常处理机制,可以帮助开发者优雅地捕获和处理程序中的异常,确保程序的健壮性和可靠性。本文将带你了解 C# 中的异常类、try-catch 语句、自定义异常以及 finally 块的使用。


1. 异常类与结构

在 C# 中,所有异常都是从 System.Exception 类派生的。Exception 类是所有异常类的基类,它提供了丰富的属性来描述异常的详细信息。

常见的异常类有:

  • System.NullReferenceException:当引用对象为 null 时引发的异常。
  • System.IndexOutOfRangeException:当数组索引超出范围时引发的异常。
  • System.DivideByZeroException:当尝试用零除数时引发的异常。

每个异常类都提供以下常见属性:

  • Message:异常的描述信息。
  • StackTrace:异常发生时的调用堆栈信息。
  • InnerException:嵌套的异常信息。
try
{
    int[] array = new int[2];
    Console.WriteLine(array[5]);  // 引发 IndexOutOfRangeException
}
catch (Exception ex)
{
    Console.WriteLine($"Error: {ex.Message}");
    Console.WriteLine($"StackTrace: {ex.StackTrace}");
}


2. try-catch 语句

try-catch 语句 是处理异常的核心结构。try 块用于放置可能引发异常的代码,catch 块则捕获并处理异常。

try
{
    int result = 10 / 0;  // 引发 DivideByZeroException
}
catch (DivideByZeroException ex)
{
    Console.WriteLine("Attempted to divide by zero.");
}

在上面的代码中,try 块中的代码尝试将 10 除以 0,从而引发 DivideByZeroExceptioncatch 块捕获到该异常并输出一条错误信息。

你可以在 catch 语句中捕获特定的异常类型,也可以捕获通用的 Exception 异常。

try
{
    string text = null;
    Console.WriteLine(text.Length);  // 引发 NullReferenceException
}
catch (NullReferenceException ex)
{
    Console.WriteLine("Null reference encountered.");
}
catch (Exception ex)
{
    Console.WriteLine($"General exception: {ex.Message}");
}


3. 自定义异常

C# 允许开发者根据具体需求创建自定义异常类。自定义异常通常派生自 Exception 类,并添加额外的属性或方法来提供更详细的错误信息。

public class InvalidAgeException : Exception
{
    public InvalidAgeException(string message) : base(message) { }
}

public class Person
{
    public int Age { get; set; }

    public void SetAge(int age)
    {
        if (age < 0 || age > 150)
            throw new InvalidAgeException("Age must be between 0 and 150.");
        Age = age;
    }
}

try
{
    Person person = new Person();
    person.SetAge(-5);  // 引发自定义异常
}
catch (InvalidAgeException ex)
{
    Console.WriteLine(ex.Message);  // 输出:Age must be between 0 and 150.
}

在这个示例中,InvalidAgeException 是一个自定义异常类,用于处理年龄设置不合法的情况。


4. finally 块的使用

finally 块 用于执行无论是否发生异常都必须执行的代码。常见的用法是释放资源、关闭文件流或数据库连接等。

FileStream fs = null;
try
{
    fs = new FileStream("example.txt", FileMode.Open);
    // 读取文件操作
}
catch (FileNotFoundException ex)
{
    Console.WriteLine("File not found.");
}
finally
{
    if (fs != null)
    {
        fs.Close();
        Console.WriteLine("FileStream closed.");
    }
}

无论是否发生异常,finally 块中的代码都会执行。它常用于确保资源正确释放,避免资源泄漏。


结论

异常处理是编写健壮程序的关键。C# 提供了强大的异常处理机制,通过 try-catch 语句捕获并处理异常,自定义异常类来满足特定需求,finally 块确保资源得到正确释放。掌握这些工具可以帮助你更好地编写安全且可维护的代码。

以下是本文的总结:

  • 使用 try-catch 捕获并处理异常。
  • 使用 Exception 类的属性获取异常详细信息。
  • 创建自定义异常类来处理特定的业务需求。
  • 使用 finally 块保证资源被正确释放。

通过理解和应用这些异常处理机制,你可以显著提高代码的健壮性,确保程序在意外错误发生时仍然能优雅地运行。


这篇博客涵盖了 C# 中的异常处理基础。如果你对某个特定主题有疑问或需要更多信息,欢迎留言或联系我!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值