2024-03-04 · C# 基础 · 学习笔记

异常处理 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}");
}
学习小结:以上是我学习这个知识点时的笔记和心得。技术学习没有捷径,多写多练多踩坑,自然就掌握了。如果这篇笔记对你有帮助,欢迎继续看看其他文章。