C# try-catch

try
{the code may occur exception}
catch
{ the code handle exception}

 

NOTE:easy than java try-catch

转载于:https://www.cnblogs.com/lsjava/p/9245790.html

### 适用场景 在 C# 中,`try-catch` 块用于处理运行时异常,确保程序在遇到意外情况时能够继续执行或以受控方式终止。其主要使用场景包括但不限于以下几种: 1. **外部资源访问**:当程序需要与外部系统交互时(如文件系统、网络服务或数据库),可能会发生不可预测的错误。例如,在读取文件时文件可能不存在,或者网络连接可能中断。在这种情况下,可以使用 `try-catch` 来捕获并处理这些异常,而不是让应用程序崩溃[^3]。 ```csharp try { using (StreamReader reader = new StreamReader("example.txt")) { string content = reader.ReadToEnd(); // 处理文件内容 } } catch (FileNotFoundException ex) { Console.WriteLine("文件未找到:" + ex.Message); } catch (IOException ex) { Console.WriteLine("发生 I/O 错误:" + ex.Message); } ``` 2. **用户输入验证**:虽然最佳实践建议使用预验证模式(如 `int.TryParse`)来避免异常,但在某些复杂场景下,仍可能依赖 `try-catch` 来捕获无效输入导致的异常。例如,解析用户输入的日期或数字时可能发生格式错误[^2]。 ```csharp try { DateTime date = DateTime.Parse(inputDate); // 使用 date } catch (FormatException) { Console.WriteLine("输入的日期格式不正确。"); } ``` 3. **第三方库调用**:调用外部库时,可能会抛出未预期的异常。为了防止这些异常影响主程序流程,可以在调用这些方法时使用 `try-catch` 进行封装和处理。 4. **多线程与异步操作**:在异步编程模型中,异常可能发生在后台线程中。如果不进行适当的捕获,这些异常可能导致应用程序意外终止。通过 `try-catch` 可以确保即使在异步任务中也能够捕获并处理异常。 ```csharp Task.Run(() => { try { // 异步操作代码 } catch (Exception ex) { Console.WriteLine("异步操作中发生异常:" + ex.Message); } }); ``` 5. **全局异常处理**:在应用程序的顶层(如 WPF 或 ASP.NET 应用程序中),可以设置全局异常处理机制来捕获未被处理的异常,从而记录日志或向用户提供友好的错误信息。 --- ### 最佳实践 - **避免过度使用**:不应将 `try-catch` 作为控制流的一部分来处理正常逻辑分支。例如,应优先使用 `int.TryParse` 而不是依赖 `int.Parse` 抛出异常来进行数值转换[^2]。 - **捕获具体异常类型**:应尽量捕获特定类型的异常,而不是直接捕获 `Exception`。这有助于识别问题根源,并避免掩盖其他潜在错误。 - **合理使用 finally 块**:`finally` 块用于释放资源或执行清理操作,无论是否发生异常都会执行。它常用于关闭文件句柄、数据库连接或网络套接字等关键资源[^3]。 ```csharp FileStream fs = null; try { fs = new FileStream("test.txt", FileMode.Open); // 文件操作 } catch (IOException ex) { Console.WriteLine("IO 异常:" + ex.Message); } finally { if (fs != null) { fs.Close(); } } ``` - **保留堆栈信息**:在重新抛出异常时,应使用 `throw;` 而不是 `throw ex;`,以确保原始堆栈跟踪信息得以保留,便于调试与诊断[^2]。 - **日志记录与恢复机制**:应在 `catch` 块中记录详细的错误信息,并根据业务需求决定是否尝试恢复或终止当前操作。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值