System.IO.Stream一次性带读卡器

时间:2009-03-28 05:17:32

标签: c# .net file-io stream

不记得我在哪里阅读它,但我记得一个MS人说,一旦你围绕System.IO.Stream创建一个阅读器,那么流不再负责处理流。

这是真的吗?有人能证实吗?也许提供参考。

这意味着此代码中的外部使用是多余的

using (var s = new FileStream(@"c:\file.txt",FileMode.Open)) {
    using (var reader = new StreamReader(s)) {
         reader.ReadToEnd();
    }
}

4 个答案:

答案 0 :(得分:2)

阅读这个问题的批准答案:

Who Disposes of an IDisposable public property?

它表示StreamReader始终处理基础流。

答案 1 :(得分:2)

FileStreamStreamReader都会实现IDisposable,所以我会同时使用using两种方式,如果底层实施要改变,不管怎么说都不可能代码仍然很好。

答案 2 :(得分:2)

如果不是多余的,因为“new StreamReader(s)”行可能失败(抛出异常)。这意味着没有 using块将转到Dispose()流。实际上,这不太可能......但它可以!例如,流可能是不可读的(或其他)。

因此,最好保护这种初始化;处理两次比完全没有好。此外,它使读者(以及任何代码分析工具)明白您已经肯定清理了自己。

答案 3 :(得分:1)

作为参考,您必须查看确实表明TextReader将关闭基础流的MSDN page for the protected Dispose(bool)

但我同意Mitch Wheat的说法,使用嵌套的using{}仍然是一个好主意,这个MSDN example也会这样做。