当前位置: 首页 > news >正文

C# --- 异常处理(Exception Handling)

异常处理是确保程序在运行过程中能够正确处理和恢复错误状态的重要机制。C# 使用 try, catch, finally 关键字来捕获和处理异常,从而提高程序的健壮性和稳定性。

1  什么是异常处理?

想象一下,你在家里做饭。突然间,煤气用完了,或者食材不够了,这些都是意外情况。你需要一种方法来处理这些意外情况,比如拨打煤气公司电话或者去超市买食材。异常处理在编程中就像处理这些意外情况的机制,它帮助你应对程序运行过程中可能出现的问题,而不是让程序崩溃。

2  异常处理的基本概念

  • 异常:是程序在运行过程中发生的错误或意外情况,比如除零错误、文件未找到等。
  • 捕获异常:使用 try 块来包裹可能发生异常的代码,当异常发生时,程序会跳转到 catch 块中执行预定的处理逻辑。
  • 处理异常:在 catch 块中,你可以处理异常,比如记录错误信息、提示用户或者进行恢复操作。
  • 确保执行的代码:使用 finally 块,无论是否发生异常,都会执行其中的代码,通常用于释放资源。

3  基本语法

> try 块:包含可能引发异常的代码。

> catch 块:用于捕获和处理异常。

> finally 块:无论是否发生异常,都会执行的代码块,通常用于释放资源。

4  示例:基本异常处理

using System;class Program
{static void Main(string[] args){try{int a = 10;int b = 0;int result = a / b;Console.WriteLine($"Result: {result}");}catch (DivideByZeroException ex){Console.WriteLine($"Exception caught: {ex.Message}");}finally{Console.WriteLine("Finally block executed.");}}
}

>>输出

    Exception caught: Attempted to divide by zero.

    Finally block executed.

5  自定义异常

可以定义自己的异常类型,以便更好地表示特定的错误情况。

using System;class InvalidAgeException : Exception
{public InvalidAgeException(string message) : base(message) { }
}class Program
{static void Main(string[] args){try{int age = -5;if (age < 0){throw new InvalidAgeException("Age cannot be negative.");}}catch (InvalidAgeException ex){Console.WriteLine($"Custom exception caught: {ex.Message}");}}}

>>输出

    Custom exception caught: Age cannot be negative.

6  异常过滤器(Exception Filters)

C# 6 引入了异常过滤器,可以在 catch 块中使用 when 关键字来进一步筛选异常。

using System;class Program
{static void Main(string[] args){int b = 0;try{int a = 10;int result = a / b;Console.WriteLine($"Result: {result}");}catch (DivideByZeroException ex) when (b == 0){Console.WriteLine("Divide by zero with b equal to zero.");}}
}

>>输出

Divide by zero with b equal to zero

为什么需要异常处理?

  • 提高程序稳定性:通过捕获和处理异常,程序不会因为意外情况而崩溃。
  • 提高用户体验:你可以友好地提示用户发生了什么问题,而不是让程序直接退出。
  • 方便调试和维护:通过记录异常信息,开发人员可以更容易地发现和修复问题。

想象一下

      想象你在家做饭时,煤气突然用完了。如果没有处理措施,你的饭就做不成了(程序崩溃)。但如果你提前准备了备用煤气罐(异常处理),你可以继续做饭,只是稍微耽搁一下(程序继续运行,并且用户得到一个友好的提示)。此外,你还可以记录下来下次什么时候需要换煤气(日志记录)。


http://www.mrgr.cn/news/7677.html

相关文章:

  • leetcode135:分发糖果
  • Niushop商城第三方插件cps联盟_同城配送_上门预约上手教程配置方法适合单商户和多商户以及V6哈
  • 【安全靶场】-DC-8
  • 学习前端面试知识(13)
  • 探索Ruby的自然语言处理宝库:文本魔法的艺术
  • 稚晖君智元机器人远程机器人系列发布:引领具身智能新高度
  • 数据仓库中的表设计模式:全量表、增量表与拉链表
  • 自编码器(Autoencoder, AE):深入理解与应用
  • BEV学习---LSS-1:论文原理及代码串讲
  • 深入探讨视频美颜SDK:直播美颜工具的核心技术与实现
  • 网络设备net_device数据结构之ifindex
  • [数据集][目标检测]木材缺陷检测数据集VOC+YOLO格式2383张10类别
  • 《亿级流量系统架构设计与实战》第十二章 评论服务
  • 【赵渝强老师】Docker三剑客
  • Spring Boot 与 Spring Security 的集成及 OAuth2 实现
  • Leetcode-day31-01背包问题
  • 开源原型设计工具Penpot
  • 缓存实现方式
  • 从源码开始:在线教育系统与网校APP的架构设计与开发实践
  • Android Studio修改默认.m2与Gradle user home缓存位置