讲师中心 微信公众号
AI工具推荐 视频效率加速

C# 怎么进行 try-catch 异常处理_C# try-catch 异常处理最佳实践

小杰君_5623

小杰君_5623

发布时间:2025-11-17 06:01:10

|

589人浏览过

|

来源于php中文网

原创

答案:C#中异常处理通过try-catch-finally结构实现,catch按顺序匹配具体异常,避免吞咽异常,应记录日志或合理响应,优先使用using管理资源,抛出异常时提供清晰信息并保留堆栈,全局异常处理作为兜底机制。

c# 怎么进行 try-catch 异常处理_c# try-catch 异常处理最佳实践

在 C# 中进行 try-catch 异常处理,主要是通过 try 块包裹可能出错的代码,用 catch 捕获并处理异常,必要时使用 finally 执行清理操作。合理使用异常处理机制,能提升程序的健壮性和可维护性。

基本语法结构

最简单的 try-catch 结构如下:

try
{
    // 可能抛出异常的代码
    int result = 10 / int.Parse("0");
}
catch (DivideByZeroException ex)
{
    Console.WriteLine("不能除以零:" + ex.Message);
}
catch (FormatException ex)
{
    Console.WriteLine("格式错误:" + ex.Message);
}
finally
{
    // 可选,无论是否发生异常都会执行
    Console.WriteLine("执行清理操作。");
}

注意:catch 块按顺序匹配,更具体的异常类型应放在前面,避免被泛化类型(如 Exception)提前捕获。

只捕获你能处理的异常

不要盲目捕获所有异常。只在你有能力恢复或有意义地响应时才使用 catch。

  • 例如,读取文件时捕获 FileNotFoundException 并提示用户重新选择路径是有意义的。
  • 但直接捕获 Exception 并“吞掉”异常(不记录也不处理)会掩盖问题,不利于调试。
try
{
    File.ReadAllText("config.txt");
}
catch (FileNotFoundException)
{
    // 提供默认配置或让用户指定路径
    Console.WriteLine("配置文件未找到,使用默认设置。");
}
// 其他异常(如权限问题)让上层处理

避免空 catch 块和异常吞咽

空 catch 块会让程序静默失败,极难排查问题。

catch (IOException) { } // ❌ 千万别这么做

正确做法是至少记录日志:

Web Accessibility (WCAG 2 AA))
Web Accessibility (WCAG 2 AA))

将 WCAG 2 AA 无障碍标准应用于设计系统、UI 组件和网页——通过可运行的验证器进行对比度计算,采用设计 token 模式使颜色天生可访问,设定排版和焦点状态规则,并提供语义检查清单。适用于构建或审查 UI。

下载
catch (IOException ex)
{
    Console.WriteLine($"IO 错误: {ex.Message}");
    // 或使用日志框架:_logger.LogError(ex, "读取文件失败");
}

使用 using 或 IDisposable 管理资源

对于文件、数据库连接等资源,优先使用 using 语句,而不是依赖 finally 手动释放。

using (var file = File.OpenRead("data.txt"))
{
    var reader = new StreamReader(file);
    string content = reader.ReadToEnd();
}
// 自动释放资源,即使发生异常

这比手动写 finally 更简洁、安全。

抛出自定义异常时要提供清晰信息

当需要 throw 异常时,确保消息清晰,并考虑封装原始异常:

if (string.IsNullOrEmpty(input))
{
    throw new ArgumentException("输入不能为空", nameof(input));
}
<p>// 包装异常时保留堆栈信息
catch (SqlException ex)
{
throw new DataAccessException("数据库操作失败", ex);
}</p>

全局异常处理作为兜底

在 UI 应用(如 WinForms、WPF)或 ASP.NET Core 中,可以设置全局异常处理器,防止程序崩溃。

  • WinForms:Application.ThreadException
  • ASP.NET Core:UseExceptionHandler 中间件

这类机制用于记录致命错误并友好提示用户,不是替代局部异常处理的理由。

基本上就这些。关键是要有意识地区分可恢复错误和程序缺陷,合理响应,不掩盖问题。

热门AI工具

更多
UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

相关专题

更多
什么是中间件
什么是中间件

中间件是一种软件组件,充当不兼容组件之间的桥梁,提供额外服务,例如集成异构系统、提供常用服务、提高应用程序性能,以及简化应用程序开发。想了解更多中间件的相关内容,可以阅读本专题下面的文章。

649

2024.05.11

Golang 中间件开发与微服务架构
Golang 中间件开发与微服务架构

本专题系统讲解 Golang 在微服务架构中的中间件开发,包括日志处理、限流与熔断、认证与授权、服务监控、API 网关设计等常见中间件功能的实现。通过实战项目,帮助开发者理解如何使用 Go 编写高效、可扩展的中间件组件,并在微服务环境中进行灵活部署与管理。

624

2025.12.18

ThinkPHP中间件机制与请求拦截处理实践
ThinkPHP中间件机制与请求拦截处理实践

本专题围绕 ThinkPHP 中间件体系展开,深入讲解中间件的定义、注册与执行流程。内容包括全局中间件与路由中间件的区别、请求前后处理逻辑、自定义中间件开发以及权限验证与日志处理应用。通过实际案例,帮助开发者掌握中间件在项目中的核心作用与最佳实践。

438

2026.03.31

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

5867

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2508

2023.08.10

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

5867

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2508

2023.08.10

数据库三范式
数据库三范式

数据库三范式是一种设计规范,用于规范化关系型数据库中的数据结构,它通过消除冗余数据、提高数据库性能和数据一致性,提供了一种有效的数据库设计方法。本专题提供数据库三范式相关的文章、下载和课程。

2745

2023.06.29

Playwright 测试失败怎么办
Playwright 测试失败怎么办

Playwright测试失败专题汇集超时、定位器匹配、浏览器提前关闭、依赖与插件配置、文件上传、SSL及Docker启动等故障文章,并介绍通过截图、报告和Trace定位错误。

0

2026.10.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C++ Core Guidelines
C++ Core Guidelines

共0课时 | 0人学习

C++ Reference
C++ Reference

共0课时 | 0人学习

C++ 官方标准说明
C++ 官方标准说明

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn