如何自动关闭StreamReader?是否有Using.System类或其他方法?
自动关闭StreamReader的最佳方式
当然有更省心的办法啦!在C#里,你完全不用手动调用sr.Close(),利用using语句(或者.NET Core/.NET 5+里的using声明)就能自动帮你管理StreamReader的资源,包括自动关闭流。
为什么using能自动关闭?
因为StreamReader实现了IDisposable接口,using语句会在代码块执行完毕(哪怕中途抛出异常)时,自动调用对象的Dispose()方法——而Dispose()内部会帮你完成流的关闭和资源释放,效果和你手动调用Close()是一样的,还更安全。
具体用法示例
1. 传统using代码块
这是兼容性最好的写法,适用于所有.NET版本:
using (StreamReader sr = new StreamReader("你的文件路径.txt")) { // 在这里执行所有读取操作,比如: string line = sr.ReadLine(); while (line != null) { Console.WriteLine(line); line = sr.ReadLine(); } } // 代码块结束后,sr已经被自动关闭,资源也释放了
2. using声明(.NET Core 3.0+/NET 5+)
如果你的项目用的是较新的.NET版本,可以用更简洁的using声明,不需要额外的大括号,变量会在当前作用域结束时自动释放:
using var sr = new StreamReader("你的文件路径.txt"); // 直接在这里写读取逻辑 string fullContent = sr.ReadToEnd(); // 当方法执行完毕或者sr离开当前作用域时,自动关闭
关于手动调用Close()
其实Close()方法内部也是调用了Dispose(),但手动调用的话,万一代码中途抛出异常,就可能漏掉关闭操作,导致资源泄漏。所以除非你有特殊的资源管理需求,否则优先用using系列的写法,这是.NET里处理可释放资源的最佳实践。
内容的提问来源于stack exchange,提问作者Kevin Garnick
相关产品推荐
相关产品推荐

