C# 系列教程:异常处理

C# 系列教程:异常处理

在本篇文章中,我们将介绍 C# 中的异常处理,包括 try-catch 语句、异常的类型和自定义异常。异常处理是编写健壮、可靠程序的重要部分。

目录

  1. 什么是异常
  2. 异常处理基础
  3. 异常的类型
  4. 自定义异常
  5. 异常处理的最佳实践

什么是异常

异常是程序运行过程中出现的错误或意外情况。异常会中断程序的正常执行流程,若不加处理,程序会终止。

异常处理基础

try-catch 语句

try-catch 语句用于捕获和处理异常。

语法
try
{
    // 可能引发异常的代码
}
catch (ExceptionType ex)
{
    // 处理异常的代码
}
示例
try
{
    int a = 10;
    int b = 0;
    int result = a / b; // 可能引发除以零异常
}
catch (DivideByZeroException ex)
{
    Console.WriteLine("除以零错误: " + ex.Message);
}

finally 语句

finally 语句用于执行在 try 块和 catch 块之后始终执行的代码。无论是否发生异常,finally 块中的代码都会执行。

语法
try
{
    // 可能引发异常的代码
}
catch (ExceptionType ex)
{
    // 处理异常的代码
}
finally
{
    // 始终执行的代码
}
示例
FileStream file = null;
try
{
    file = new FileStream("example.txt", FileMode.Open);
    // 读取文件
}
catch (FileNotFoundException ex)
{
    Console.WriteLine("文件未找到: " + ex.Message);
}
finally
{
    if (file != null)
    {
        file.Close(); // 关闭文件
    }
}

异常的类型

系统异常

系统异常是由 .NET 框架引发的异常,例如 DivideByZeroExceptionNullReferenceException 等。

示例
try
{
    int[] array = new int[5];
    int value = array[10]; // 可能引发索引超出范围异常
}
catch (IndexOutOfRangeException ex)
{
    Console.WriteLine("索引超出范围: " + ex.Message);
}

应用程序异常

应用程序异常是由应用程序代码引发的异常,例如自定义异常。

自定义异常

自定义异常用于在应用程序中引入特定的异常类型。自定义异常类通常继承自 Exception 类。

创建自定义异常

语法
public class MyCustomException : Exception
{
    public MyCustomException() { }
    public MyCustomException(string message) : base(message) { }
    public MyCustomException(string message, Exception inner) : base(message, inner) { }
    protected MyCustomException(
      System.Runtime.Serialization.SerializationInfo info,
      System.Runtime.Serialization.StreamingContext context) : base(info, context) { }
}
示例
public class InvalidAgeException : Exception
{
    public InvalidAgeException() : base("年龄无效") { }
    public InvalidAgeException(string message) : base(message) { }
}

public class Person
{
    private int age;
    public int Age
    {
        get { return age; }
        set
        {
            if (value < 0 || value > 120)
            {
                throw new InvalidAgeException("年龄必须在 0 到 120 之间");
            }
            age = value;
        }
    }
}

try
{
    Person person = new Person();
    person.Age = -5; // 可能引发自定义异常
}
catch (InvalidAgeException ex)
{
    Console.WriteLine("错误: " + ex.Message);
}

异常处理的最佳实践

  1. 只捕获需要处理的异常:不要捕获所有异常,应该只捕获那些你可以处理的异常。
  2. 提供有用的错误信息:异常信息应该描述性强,以便调试和解决问题。
  3. 记录异常:在 catch 块中记录异常信息,以便日后分析和调试。
  4. 避免在 catch 块中执行复杂逻辑:catch 块中应该只包含处理异常的必要逻辑。
  5. 使用 finally 块释放资源:确保在 finally 块中释放资源,如文件句柄、数据库连接等。

通过掌握这些异常处理技术和最佳实践,您可以编写更健壮和可靠的 C# 程序。

下一篇文章将介绍 C# 中的文件操作,包括文件的读取、写入和管理。敬请期待!

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东城十三

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值