C# 异常处理核心机制与实战示例详解

宋时安
宋时安
发布时间:2026-10-14 | 5人浏览过
原创

在 C# 开发中,异常处理是保障程序稳定运行的关键。本文将深入讲解如何利用 try 和 catch 结构来捕获如类型转换失败等常见错误,并演示如何通过抛出自定义异常来规范业务逻辑校验过程。

异常处理的核心目标与结构

C# 的异常处理旨在隔离正常业务逻辑与错误处理代码。当程序在执行过程中遇到不可预见的状况(如用户输入非法数据)时,传统的做法可能需要大量且冗余的条件判断。而使用 try-catch 块可以将潜在的报错风险点包裹起来,一旦内部代码抛出异常,程序控制权将立即跳转至对应的 catch 块进行处理,避免程序直接崩溃。

准备:基础命名空间与输入环境

以下示例基于标准的 C# 控制台应用程序编写。确保项目中引用了基础的 System 命名空间,以便使用 Console 类进行输出交互以及 Convert 类进行数据类型转换。

真实操作顺序

第 1 步:实现简单的 Try-Catch 捕获机制

目的:展示如何在发生运行时错误时捕获异常并获取详细的错误信息。

入口:Main 方法内部的 try 代码块。

动作:

  1. 首先在屏幕上输出提示信息,标识转换前的状态。
  2. 调用 Convert.ToInt32(Console.ReadLine()) 尝试将用户的键盘输入转换为整数。
  3. 如果输入内容无法被解析为数字(例如输入了字母),该行代码会抛出异常。

完成状态:一旦出错,程序跳过后续代码,直接进入 catch (Exception ex) 分支。

static void Main(string[] args)
{
    try
    {
        Console.WriteLine("Convert之前");
        int a = Convert.ToInt32(Console.ReadLine()); // 若此处输入非数字,将触发异常
        Console.WriteLine("Convert之后");
    }
    catch (Exception ex)
    {
        // 捕获所有通用异常
        Console.WriteLine("输入错误:" + ex.Message + "异常堆栈:" + ex.StackTrace);
    }
}

第 2 步:封装业务逻辑与自定义异常抛出

目的:在独立的业务方法中进行逻辑校验,并通过显式抛出异常(throw new Exception(...))来中断不符合规范的执行流。

入口:主函数中的另一个 try 块及调用的 GetAgeDesc 辅助方法。

动作:

  • 再次读取输入并转换为年龄整数。
  • 调用外部静态方法 GetAgeDesc(s) 获取描述。

重要参数说明:在 GetAgeDesc 方法内部,我们根据年龄范围进行分类。当年龄小于 0 或大于等于 100 时,属于无效的业务数据,此时不再返回字符串,而是主动创建一个新的异常对象并抛出。这迫使调用方必须将其包裹在 try-catch 中处理。

// 主函数中的业务调用部分
try
{
    Console.WriteLine("请输入你的年龄:");
    int s = Convert.ToInt32(Console.ReadLine());
    string desc = GetAgeDesc(s); // 此调用可能抛出异常
    Console.WriteLine(desc);
}
catch (Exception ex)
{
    Console.WriteLine("数据错误," + ex.Message);
}
Console.ReadKey();

// 辅助方法:负责具体的年龄段判断
static string GetAgeDesc(int age)
{
    if (age >= 0 && age <= 3)
    {
        return "婴幼儿";
    }
    else if (age > 3 && age < 18)
    {
        return "青少年";
    }
    else if (age >= 18 && age < 60)
    {
        return "成年人";
    }
    else if (age >= 60 && age < 100)
    {
        return "老年人";
    }
    else
    {
        // 对于非预期的数值范围,主动抛出异常
        throw new Exception("自己创建的ex.Message");
    }
}

第 3 步:运行观察与结果验证

可观察的完成状态:

  • 场景 A(正确输入):输入一个合法的年龄(如 20),屏幕依次显示 “请输入你的年龄:”、“成年人”。
  • 场景 B(格式错误):输入 “abc”,由于 Convert.ToInt32 失败,直接打印 “输入错误:...” 并附带详细的异常堆栈信息。
  • 场景 C(逻辑越界):输入 “150”,程序正常运行输入转换,但在调用 GetAgeDesc 时触发内部 throw 语句,随后进入外层 Catch,输出 “数据错误,自己创建的ex.Message”。

完成判断

当上述三种输入场景均能按预期分别触发转换异常拦截或业务规则异常拦截,并在控制台输出包含 Message 的关键错误信息时,即表明该 C# 异常处理逻辑编写正确。通过 ex.Message 可以直观地向用户或日志系统传递简洁的错误原因,而 ex.StackTrace 则保留了完整的调用路径以备排查深层 Bug。

简要总结

掌握 C# 的异常处理模式不仅是写出能跑的代码,更是构建容错系统的基石。通过组合使用内置的 try-catch 保护机制和方法内的主动 throw 行为,开发者可以在保持代码整洁的同时,有效地控制程序的错误边界。以上就是 C# 异常处理示例分享的详细内容,更多关于 C# 编程基础的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表