c锐利的溪流阵列

时间:2010-07-09 16:14:35

标签: c# arrays stream

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

这里有一些例子: MSDN using Statement Reference

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

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

3 个答案:

答案 0 :(得分:7)

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

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

  public void  Dispose()
  {
      Streams.ForEach(x=>x.Dispose()):
  }
}

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

答案 1 :(得分:3)

您必须执行using所做的事情而不使用using

这意味着循环遍历数组并在每个实例上调用Dispose(如果需要,在显式转换为IDisposable之后)。在finally块中执行该循环。

最后,您没有测试它们是否妥善处理。一旦你调用Dispose,你就应该将它们清空,因为你不能再使用它们了。

答案 2 :(得分:2)

using()语句是一种旨在重新制定良好习惯的处置模式,但并不是必需的。在很多情况下,您需要在范围函数的生命周期之外存储对象。

虽然我认为你应该以一种可以使用using()语句的方式进行架构,但重要的是在一些encopassing finally块中,你可以处理每个流。

要回答最后一个问题,Stream类似乎没有任何方法或属性来确定它是否已被关闭/处置,但是如果正确实现了IDisposable模式,则可以再次调用Close / Dispose需要确定。