我有一个方法,它将Stream作为参数:
public void Method(Stream stream)
{
...
}
在这个方法中,我创建了StreamReader。我应该在using语句中包含StreamReader用法吗?如果是这样,将丢弃流,这是不正确的。在这种情况下使用Stream和StreamReader的最佳做法是什么?
答案 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;