StreamReader和Dispose

时间:2011-03-28 15:47:40

标签: c# dispose

我有一个方法,它将Stream作为参数:

public void Method(Stream stream)
{
...
}

在这个方法中,我创建了StreamReader。我应该在using语句中包含StreamReader用法吗?如果是这样,将丢弃流,这是不正确的。在这种情况下使用Stream和StreamReader的最佳做法是什么?

3 个答案:

答案 0 :(得分:4)

没有 - 在这种情况下,调用者进行处理是传统的。

答案 1 :(得分:2)

Dispose上拨打StreamReader将处置基础Stream。如果这是你想要的,那么将StreamReader包装在using构造中。否则只需构造StreamReader并留给垃圾收集器进行清理。

换句话说,这取决于您的功能是否“拥有”Stream

答案 2 :(得分:2)

在这种情况下,我倾向于写这样的东西和方法的结尾:

streamWriter.Flush(); // Only for writers, not for readers
streamWriter = null; // Show myself and other coders that lack of Dispose is not a mistake but it's intented

这种方法是我用于总是处理底层流的流装饰器的方法,值得一提的是,在某些情况下(例如 - DeflateStream)你需要调用.Dispose(),但在这种情况下例如,流装饰器允许您选择是否希望它们关闭基础流。它可能看起来像这样:

DeflateStream deflateStream = new DeflateStream(fileReader.BaseStream, CompressionMode.Decompress, true);
BinaryReader deflateReader = new BinaryReader(deflateStream);
var articleText = deflateReader.ReadString();
deflateReader = null;
deflateStream.Close();
deflateStream.Dispose();
deflateStream = null;