预先创建的流和"using"块

  • 本文关键字:using 创建 c# stream clone
  • 更新时间 :
  • 英文 :


当"使用"块篡改了我预先创建的对象时,我真的很恼火。我有一段代码

class Asset {
    public Stream FileStream { get; set; }
    public Asset(string fileName) {
        FileStream = ...open a file stream...;
    }
}
// Somewhere else
Asset asset = new Asset("file.txt");
using (var reader = new StreamReader(asset.FileStream)) {
    //blah blah blah
}
// Somewhere else else
using (var reader2 = new StreamReader(asset.FileStream))

=>抛出此异常:

System.ArgumentException:流不可读。

Visual Studio中的逐步调试帮助我了解了这项资产。FileStream已在第一个"using"块之后被释放。

请帮我救他的命:如何从流创建克隆流?

我同意读者关闭底层流的事实是愚蠢的。本文概述的方法是创建一个decorator类,该类封装Stream,并且对CloseDispose方法没有操作。不过,这可能不值得开销,所以您应该考虑不对这些读者使用using

相关内容

  • 没有找到相关文章

最新更新