c锐利的溪流阵列

sco*_*ott 4 c# arrays stream

通常我在using语句中声明流,以确保在完成它时正确处理流,并且当我在using块之外时,我不会错误地调用它.

这里有一些例子: 使用Statement Reference的MSDN

如何使用带有数组流的using语句?它是否相当于在try/catch/finally块之外声明数组并在finally块中调用每个流的dispose方法?

最后,如何测试流已正确处理?

kem*_*002 7

我会创建一个新的对象来保存Streams.像这样的东西(没有完全充实):

class StreamHolder : IDisposable
{
  List<Stream> Streams {get;}

  public void  Dispose()
  {
      Streams.ForEach(x=>x.Dispose()):
  }
}
Run Code Online (Sandbox Code Playgroud)

这样您就可以将容器对象放在using语句中,它将为您处理流处理.你的另一个选择是在Finally块中处理它,但是如果我要在多个地方执行此操作,我想封装它,所以当我完成时我不会意外忘记处理所有流.

  • 这没关系,但它太具体了.没有理由不制作使用IEnumerable初始化的通用EnumerableDisposer.此时,您需要更改anon方法,以便使用`as`转换为IDisposable,如果不为null,则调用Dispose.我过去一直都是这样做的,效果很好. (2认同)