当"使用"块篡改了我预先创建的对象时,我真的很恼火。我有一段代码
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
,并且对Close
和Dispose
方法没有操作。不过,这可能不值得开销,所以您应该考虑不对这些读者使用using
。