You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CA2202示例中为何在使用StreamWriter前将Stream设为null?

为什么在StreamWriter使用前要设置stream = null;?

咱先看看这段微软文档里的代码示例:

Stream stream = null;
try {
stream = new FileStream("file.txt", FileMode.OpenOrCreate);
using (StreamWriter writer = new StreamWriter(stream)) {
stream = null;
// Use the writer object...
}
} finally {
if(stream != null) stream.Dispose();
}

这行stream = null;的核心作用就是避免对同一个流对象执行双重释放(double-dispose),咱掰碎了说:

  • 首先,StreamWriter的using语句块会在执行完毕后自动调用Dispose()方法,而StreamWriter默认会在自己被释放的时候,同时释放它所包装的底层stream实例(也就是这里的FileStream)。
  • 如果不把stream变量设为null,那么在finally块里,stream仍然指向那个已经被StreamWriter释放过的FileStream对象,这时候finally里的stream.Dispose()就会再次调用这个对象的释放方法。虽然大部分.NET类的Dispose()是幂等的(多次调用不会报错),但这显然不是规范的做法,甚至有些特殊的资源实现可能会因为重复释放出现异常。
  • 把stream设为null后,finally块里的if(stream != null)判断就会不成立,自然就跳过了重复释放的操作,保证资源只被释放一次。

顺带提一句:现在我们有更简洁的写法来避免这种繁琐的处理,比如直接把FileStream的创建嵌套到StreamWriter的using里,但这个示例的目的是为了清晰展示手动管理资源时的注意事项,所以用了这种稍显“复古”的写法来突出核心逻辑。

内容的提问来源于stack exchange,提问作者mschuurmans

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:40:24