流绑定了吗?

时间:2013-07-02 05:35:36

标签: c# winforms io stream

我在尝试将我的流分配给另一个并将其处理如下时遇到异常

Stream str = new FileStream(somefile, FileMode.OpenOrCreate);
Stream newstr = str;
str.Dispose(); // I disposed only str and not new str

byte[] b = new byte[newstr.Length];// got exception here stating unable to access closed stream...

为什么......?我是C#和Stream的新用户,其中Stream位于命名空间System.IO中。

1 个答案:

答案 0 :(得分:3)

是的,当您致电str.Dispose时,newStr也会被处理掉。这是因为Stream与.NET中的所有类一样,都是reference types。当您撰写Stream newstr = str时,您没有创建新的Stream,而只需创建对相同 Stream的新引用。

写这个的正确方法是:

Stream str = new FileStream(somefile, FileMode.OpenOrCreate);
int strLen = str.Length;
str.Dispose(); 

byte[] b = new byte[strLen];

这将避免任何ObjectDisposedException。请注意,intvalue type,因此当您编写int strLen = str.Length时, 创建值的新副本,并将其保存在变量{{1}中}}。因此,即使在处置strLen之后,您也可以使用该值。