异常处理 try-catch-finally
异常处理是程序健壮性的关键。C# 用 try-catch-finally 结构处理异常,能 catch 的就处理,处理不了就往上抛。不要把所有异常都 catch (Exception) 吞掉,那样会把真正的 bug 藏起来。
自己踩过的坑:throw ex 会重置堆栈信息,让调试时看不到原始出错位置;要重新抛出应该用 throw;(不带参数)。多个 catch 块要从具体到通用排列,先 catch FileNotFoundException,再 catch IOException,最后才是 Exception。
实践建议:1) 只 catch 你能处理的异常;2) 异常信息要写清楚上下文;3) finally 或 using 释放资源;4) 不要用异常做流程控制。
代码示例
try
{
string content = File.ReadAllText("data.txt");
Console.WriteLine(content.Length);
}
catch (FileNotFoundException ex)
{
Console.WriteLine($"文件不存在:{ex.FileName}");
}
catch (IOException ex)
{
Console.WriteLine($"IO 错误:{ex.Message}");
// 重新抛出,不带 ex,保留堆栈
throw;
}
finally
{
Console.WriteLine("清理资源");
}
// using 自动释放资源(推荐)
try
{
using var reader = new StreamReader("data.txt");
string line = reader.ReadLine();
}
catch (Exception ex)
{
Console.WriteLine($"读取失败:{ex.Message}");
}
学习小结:以上是我学习这个知识点时的笔记和心得。技术学习没有捷径,多写多练多踩坑,自然就掌握了。如果这篇笔记对你有帮助,欢迎继续看看其他文章。