当“使用”块篡改我预先创建的对象时,我真的很生气。我有这段代码
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:Stream无法读取。
Visual Studio中的逐步调试帮助我知道asset.FileStream已在第一个“using”块之后处理。
请帮我救命:(( 如何从流中创建克隆流?
答案 0 :(得分:2)
我同意读者关闭基础流的事实是愚蠢的。 this article中概述的方法是创建一个包装Stream
的装饰器类,并且对Close
和Dispose
方法没有操作。但是,这可能不值得花费,所以你应该考虑不要为这些读者使用using
。